千家信息网

C++实现二叉树层序遍历的方法

发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,今天小编给大家分享一下C++实现二叉树层序遍历的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起
千家信息网最后更新 2025年02月03日C++实现二叉树层序遍历的方法

今天小编给大家分享一下C++实现二叉树层序遍历的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

二叉树层序遍历

Given a binary tree, return the level order traversal of its nodes" values. (ie, from left to right, level by level).

For example:
Given binary tree {3,9,20,#,#,15,7},

3
/
9 20
/
15 7

return its level order traversal as:

[
[3],
[9,20],
[15,7]
]

层序遍历二叉树是典型的广度优先搜索 BFS 的应用,但是这里稍微复杂一点的是,要把各个层的数分开,存到一个二维向量里面,大体思路还是基本相同的,建立一个 queue,然后先把根节点放进去,这时候找根节点的左右两个子节点,这时候去掉根节点,此时 queue 里的元素就是下一层的所有节点,用一个 for 循环遍历它们,然后存到一个一维向量里,遍历完之后再把这个一维向量存到二维向量里,以此类推,可以完成层序遍历,参见代码如下:

解法一:

class Solution {public:    vector> levelOrder(TreeNode* root) {        if (!root) return {};        vector> res;        queue q{{root}};        while (!q.empty()) {            vector oneLevel;            for (int i = q.size(); i > 0; --i) {                TreeNode *t = q.front(); q.pop();                oneLevel.push_back(t->val);                if (t->left) q.push(t->left);                if (t->right) q.push(t->right);            }            res.push_back(oneLevel);        }        return res;    }};

下面来看递归的写法,核心就在于需要一个二维数组,和一个变量 level,关于 level 的作用可以参见博主的另一篇博客 Binary Tree Level Order Traversal II 中的讲解,参见代码如下:

解法二:

class Solution {public:    vector> levelOrder(TreeNode* root) {        vector> res;        levelorder(root, 0, res);        return res;    }    void levelorder(TreeNode* node, int level, vector>& res) {        if (!node) return;        if (res.size() == level) res.push_back({});        res[level].push_back(node->val);        if (node->left) levelorder(node->left, level + 1, res);        if (node->right) levelorder(node->right, level + 1, res);    }};

以上就是"C++实现二叉树层序遍历的方法"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

0