美文网首页
树的遍历

树的遍历

作者: km15 | 来源:发表于2020-03-08 11:57 被阅读0次

    1、先序遍历(深度搜索)(可以用来做求解叶子节点的带全路径之和)
    访问,然后递归遍历节点!
    void preorder(int root) {
    printf("%d", Node[root].data); //访问当前节点
    for (int i = 0;i < Node[root].child.size();i++) {
    preorder(Node[root].child[i]);
    }
    }

    2、树的层序遍历(广度搜索)
    本质仍旧没变

    void layerorder(int root) {
        queue<int> Q;
        Q.push(root);
        while(!Q.empty()) {
            int front = Q.front();  //取出队首元素
            print("%d ", Node[front].data`);    //访问当前节点的数据域
            for (int i = 0;i < Node[front].size;i++) {
                q.push(Node[front].child[i]);
            }
        }
    }
    

    更进一步,需要加需要的话

    struct node {
        typename data;  //数据域
        vector child;   //指针域,存放所有子节点的下标
        int layer;      //层号
    }Node[maxn];
    
    
    void layerorder(int root) {
        queue<int> Q;
        Q.push(root);
        while(!Q.empty()) {
            int front = Q.front();  //取出队首元素
            print("%d ", Node[front].data`);    //访问当前节点的数据域
            for (int i = 0;i < Node[front].size;i++) {
                int child = Node[front].child[i];
                //子节点的层数当前层号+1
                Node[child].layer = Node[front].layer + 1;
                q.push(Node[front].child[i]);
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:树的遍历

          本文链接:https://www.haomeiwen.com/subject/qvfddhtx.html