`

层层遍历树

 
阅读更多
// ----------------------  层层遍历树  ------------------------ //

// 笨方法
typedef struct Node {
    int val;
    struct Node *left;
    struct Node *right;
} TNode;

static TNode root;

void visit_node(TNode *node, int layer, int max_layer) {
    if (!node) return;
    if (layer > max_layer) return;
    cout<<"layer "<<layer<<": "<<node->val<<endl;
    int sl = ++layer;
    visit_node(node->left, sl, max_layer);
    visit_node(node->right, sl, max_layer);
}

int max_layer(TNode *root) {
    if(!root) return 0;
    if(!root->left && !root->right) return 1;
    int l = max_layer(root->left);
    int r = max_layer(root->right);
    int ret = l>r?l:r;
    return ++ret;
}

// 入口方法
void visit_tree(TNode *root) {
    int ml = max_layer(root);
    cout<<"max layer: "<<ml<<endl;
    visit_node(root, 1, ml);
}

/*------------------------------------------------------------------------*/

// 好方法
class Solution {
public:
    vector<vector<int> > levelOrder(TreeNode *root) {
        vector<vector<int> > ret;
        if(!root) return ret;
        vector<int> vec;
        ret.push_back(vec);
        queue<TreeNode *> q;
        q.push(root);
        int l1 = 1, l2 = 0, cl = 0;
        while(!q.empty()) {
            TreeNode *&f = q.front();
            q.pop(); --l1; ret[cl].push_back(f->val);
            if(f->left) {q.push(f->left); ++l2;}
            if(f->right) {q.push(f->right); ++l2;}
            if(l1 == 0) {
                l1 = l2;
                l2 = 0;
                if(!q.empty()) {
                    vector<int> vec;
                    ret.push_back(vec);
                    ++cl;
                }
            }
        }
        
        return ret;
    }
};

 

欢迎关注微信公众号——计算机视觉 

 

分享到:
评论

相关推荐

    (完整word版)树历年试题及参考答案(08)(word文档良心出品).pdf

    层序遍历是指从根节点出发,层层访问树中的所有节点。 7. 完全二叉树 完全二叉树是一种特殊的二叉树,其中所有的叶子节点都在最后一层,除了最后一层之外所有的节点都有两个子节点。 8. 中序线索化二叉树 中序...

    图的遍历操作指导

    1. **深度优先遍历(DFS)**:从起始顶点开始,尽可能深地搜索树的分支。如果到达了一个叶子节点或一条死胡同,就回溯到上一层,继续探索其他分支。DFS通常使用递归实现,或者使用栈来模拟递归。 2. **广度优先遍历...

    广度优先遍历图详解基本面

    广度优先遍历(Breadth-First Search,简称BFS)是一种用于遍历或搜索树或图的算法。在图中,该算法从根节点开始,并沿着节点的边逐层探索,首先访问最近的节点,然后再访问其邻居节点,以此类推,直到所有可达节点...

    数据结构章节练习题 - 答案第7章 图.docx

    DFS从一个顶点开始,沿着一条路径遍历到达图的尽头,而BFS则从一个顶点开始,层层遍历到达图的尽头。 3. 图的类型:有向图和无向图。有向图中,每条边都有方向,而无向图中,每条边没有方向。 4. 图的连通性:图的...

    文件夹遍历

    遍历文件夹就是沿着这个树形结构逐个访问每个节点的过程。 在编程中,实现文件夹遍历主要依赖于特定编程语言提供的文件I/O库。以下以Python和Java为例: 1. Python: - 使用`os`和`os.path`模块。`os.listdir()`...

    数据结构 图书管理系统

    这样,用户可以通过层层遍历找到目标图书。 6. **图结构**:图书之间可能存在关联,比如推荐系统中的“相关书籍”。使用图结构可以方便地表示这些关系,通过图的遍历算法找到推荐列表。 在设计图书管理系统时,...

    Data Structures And Algorithms (Vol 1 Sorting And Searching)

    3. **广度优先搜索(BFS)**:从根节点开始,一层层遍历所有节点,适用于寻找最短路径。 4. **深度优先搜索(DFS)**:尽可能深地搜索树的分支,通常用于图的遍历和搜索。 ### 结合实际应用 理解数据结构与算法...

    二叉排序树与平衡二叉树的实现

    (2)对二叉排序树T作中序遍历,输出结果; (3)计算二叉排序树T查找成功的平均查找长度,输出结果; (4)输入元素x,查找二叉排序树T,若存在含x的结点,则删该结点,并作中序遍历(执行操作2);否则输出信息“无x”; (5...

    Find_Depth和Link的实现

    BFS则是从根节点开始,一层层地遍历所有节点。 "Link"操作则可能是指在树或图中连接两个节点,例如在并查集中建立两个集合的链接,或者在树的重构过程中调整节点的父子关系。这种操作可能涉及节点的parent引用更新...

    算法导论-中文版

    - 广度优先搜索:从根节点开始,一层层遍历所有节点。 **知识点四:高级算法概念** - **动态规划**: - 一种通过把原问题分解为互相重叠的子问题的方式求解复杂问题的方法。 - 应用场景广泛,如背包问题、最长...

    数据结构-实验三-题目二:哈夫曼树 (3).pdf

    为信息编码是哈夫曼树的应用部分,通过定义字符串 str1 储存编码,然后遍历信息字符串中的每一个字符,将其与 huffTree 前 n 个叶子结点的 word 域逐个比较,发现相同的则将该结点的编码串 code 连接到 str1 串的...

    C语言常用算法源代码

    - 广度优先搜索(BFS):从根节点开始,一层层地遍历所有节点。 - Dijkstra算法:用于寻找图中两点间的最短路径。 - Bellman-Ford算法:处理存在负权边的最短路径问题。 5. **动态规划**: - 背包问题:0/1背包...

    数据结构-实验三-题目二:哈夫曼树 (3).docx

    2. 遍历所有初始化的哈夫曼树结点 3. 如果结点中有记录代表的字符且字符等于取出的字符,说明该字符的叶子存在,则将该结点的权加一 4. 如果所有结点均没有记录字符与取出字符一致,说明该字符的叶子不存在,则将...

    算法参考资料2013年信息学奥林匹克中国国家队论文集

    沿着树的深度遍历树的节点,尽可能深地搜索树的分支。 - 广度优先搜索(BFS):在图中使用队列数据结构,先访问离起始点最近的节点。 - 最短路径算法:如迪杰斯特拉(Dijkstra)算法和贝尔曼-福特(Bellman-Ford)...

    程序员面试题精选100题

    **思路二**:利用二叉查找树的中序遍历特性,将遍历过程中遇到的每个节点转化为链表中的一个元素。 - **实现细节**: - **思路一的实现**: 1. 首先递归地处理左子树,得到左子树的链表; 2. 然后递归地处理右...

    文件检索的类,使用多线程查找文件

    这个过程可以是深度优先(先遍历完一个分支再转向另一个)或广度优先(一层层地遍历所有子节点)。 3. **多线程文件搜索实现**:在Java、Python、C#等支持多线程的语言中,可以创建多个线程分别处理不同的文件夹。...

Global site tag (gtag.js) - Google Analytics