`

层层遍历树

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

// 笨方法
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引用更新...

    27丨递归树:如何借助树来求解递归算法的时间复杂度?1

    递归树通过其清晰的结构化表达,使得我们可以直观地观察到递归算法是如何一层层展开,以及每一层的计算代价。这种可视化的方法不仅适用于排序算法,还可以广泛应用于其他递归算法的时间复杂度分析。例如,在分析二分...

    算法导论-中文版

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

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

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

    C语言常用算法源代码

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

    信息学奥赛——算法入门教程

    - **广度优先算法**:从根节点开始,一层层遍历直至找到目标。 - **深度优先算法**:尽可能深入探索每一条路径直到尽头。 ##### 动态规划法 - **定义**:动态规划法是通过保存已经计算过的子问题结果来避免重复...

    shiyan.rar_search nodes_search nodes c_叶子节点

    在计算机科学与信息技术领域...通过实际编码实现对树的遍历和搜索,尤其是专注于叶子节点的查找,开发者可以加深对树结构的理解,提升解决复杂数据问题的能力,为未来在更复杂系统开发中遇到的相关问题打下坚实的基础。

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

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

    深度优先搜索非递归算法

    特别是在处理图论和树形结构数据时,它们常常被用来解决寻找路径、判断连通性、拓扑排序等各类问题。C++作为一种高效的编程语言,其在实现这两类算法时,既能够编写出优雅的递归版本,也能够实现更为复杂但实用的非...

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

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

Global site tag (gtag.js) - Google Analytics