二叉树的层序遍历

Posted  落禅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树的层序遍历相关的知识,希望对你有一定的参考价值。

107. 二叉树的层序遍历 II

给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)

例如:
给定二叉树 [3,9,20,null,null,15,7],3/ \\
  9  20/  \\
   15   7
   
返回其自底向上的层序遍历为:
[
  [15,7],
  [9,20],
  [3]
]

首先完成二叉树的层序遍历,然后将数组进行逆置,就完成了自低向下的二叉树的层序遍历,故此题的难点是完成二叉树的层序遍历

这里我们借助队列来实现,利用队列先进先出的特性录入每一个节点的值

class Solution {
public:
//利用队列进行实现
    vector<vector<int>> levelOrderBottom(TreeNode* root) {
        queue<TreeNode*>q;
        vector<vector<int>>vv;
        //判断头结点是否为空,如果不为空就让头结点进入队列
        if(root!=nullptr)
        {
            q.push(root);
        }
        int levelsize=0;//用来控制每一层遍历的个数
        while(!q.empty())
        {
            vector<int>v;
            levelsize=q.size();
            //每一层的遍历
            for(int i=0;i<levelsize;i++)
            {
               //记录当前节点
                TreeNode*front=q.front();
                q.pop();
                //将当前节点的值录入数组
                v.push_back(front->val);
                //让当前节点的左孩子进入队列
                if(front->left!=nullptr)
                {
                    q.push(front->left);
                }
                //让当前节点的右孩子进入队列
                if(front->right!=nullptr)
                {
                    q.push(front->right);
                }
            }
            vv.push_back(v);
        }
        //反转数组
        reverse(vv.begin(),vv.end());
        return vv;
    }
};

以上是关于二叉树的层序遍历的主要内容,如果未能解决你的问题,请参考以下文章

NC 15 二叉树的层序遍历

求二叉树的层序遍历

(二叉树)原来二叉树的层序遍历这么简单!!!

二叉树的层序遍历

java刷题--102二叉树的层序遍历

NC15 求二叉树的层序遍历