您的位置:首页 > 其它

二叉树的层次遍历

2017-04-18 11:53 197 查看

二叉树的层次遍历

题目描述:

给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)。
样例

给一棵二叉树 {3,9,20,#,#,15,7} :
3
/ \
9  20
/  \
15   7

返回他的分层遍历结果:
[
[3],
[9,20],
[15,7]
]


解题思路:

利用队列的特性,将根结点放入事先建好的队列中,若队列的长度不为0,则在队列中删除根结点,同时把根结点插入向量中以及把它的左右儿子放进队列中,以此类推,这样便能达到层次遍历的要求。

代码实现:

class Solution {

    /**

     * @param root: The root of binary tree.

     * @return: Level order a list of lists of integer

     */

public:

    vector<vector<int>> levelOrder(TreeNode *root) {

        // write your code here

         vector<vector<int>>lever;

         if(root==NULL)   return lever;

         vector<int>dlever;

         queue<TreeNode*>q;

        q.push(root);

        int i=1;

        int j=0;

        while(!q.empty()){

            TreeNode *p=q.front();

            q.pop();

            if(p==NULL) {

                ++j;

            }

            else {

                dlever.push_back(p->val);

                q.push(p->left);

                q.push(p->right);

            }

            if(i==(dlever.size()+j)&&dlever.size()!=0){

                lever.push_back(dlever);

                dlever.clear();

                i=i*2;

                j=j*2;

            }

        }

        return lever;

    }

};

A题感悟:

我觉得这道题有些难,虽然思路好理解,但是代码实现总是不行,所有就借鉴了一下别人的代码。在此代码中学会了队列还有双重向量的一些用法,也算收获不少。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: