102.二叉树的层次遍历

题目
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。

例如:
给定二叉树: [3,9,20,null,null,15,7],

3

/
9 20
/
15 7

返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]

思路
二叉树或一般树的水平层次遍历,可以使用BFS(广度搜素)算法,使用队列 Queue标记每一层的结点元素;
Queue:先进先出, 后进后出。可以保证每一层遍历时的结点顺序;</p>
BFS:类似于电影中的病毒传染,先感染靠近自己的,再由易感染层感染更外层…(我理解的就是这么个理);
该题二叉树中,先把根结点压入队列,当队列不为空时,移除队首结点,并判断该结点的左右子树中有无非空结点,若存在,则再次入队对应的左右子树结点……同一层的每个结点循环以上操作,直至队列为空,循环结束。

#include "TreeNode.h"
class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        vector<vector<int>> result;
        queue<TreeNode*> que;
        if (root == NULL) return result;
        que.push(root);

        while (!que.empty())
        {
            int size = que.size();
            vector<int> temp;
            for (int i = 0; i < size; i++)
            {
                TreeNode* node = que.front();
                que.pop();
                temp.push_back(node->val);
                if (node->left != NULL) que.push(node->left);
                if (node->right != NULL) que.push(node->right);
            }
            result.push_back(temp);
        }
        return result;
    }
};

int main(int argc, char* argv[])
{
    string a = "3,9,20,null,null,15,7";
    auto tree = stringToTreeNode(a);
    auto res = Solution().levelOrder(tree);
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • [{"reportDate": "2018-01-23 23:28:49","fluctuateCause": n...
    加勒比海带_4bbc阅读 930评论 1 2
  • 给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。 例如: 代码
    vbuer阅读 281评论 0 0
  • 昨晚通宵看了“阿廖沙事件”前后及林奕含自杀事件,与其说是失眠,倒不如说是好奇心促使我去猜测——还有什么天朝不能发生...
    九降风阅读 422评论 0 0
  • 他们说“时间能减轻痛苦”,---时间却没有如许力量。真正的痛苦,如同肌肤,随同年龄生长。时间可以考验忧患,却不是一...
    一只野生的呆头喵阅读 327评论 0 1

友情链接更多精彩内容