您的位置:首页 > 其它

二叉树的层次遍历

2017-04-19 10:48 260 查看
问题描述:

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

样例

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

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


解题思路:

建立队列,将二叉树每一层的数据依次放入队列中,再建立一个一维向量,将放入队列的数据依次输出,放入一维向量,这样每一层的数据就形成一个向量。建立一个二维向量,将所有的数据放入二维向量里输出。

代码实现:

/**

 * Definition of TreeNode:

 * class TreeNode {

 * public:

 *     int val;

 *     TreeNode *left, *right;

 *     TreeNode(int val) {

 *         this->val = val;

 *         this->left = this->right = NULL;

 *     }

 * }

 */

 

 

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>> lz;      

        if(root==NULL) return lz;

        queue<TreeNode*>q;     

        q.push(root) ;      

        while(q.empty()==0){           

            vector<int> l;    

            int size=q.size();

        for(int i=0;i<size;i++){

            TreeNode *node=q.front();

            q.pop();         

            l.push_back(node->val);

            if(node->left!=NULL)

                q.push(node->left);      

            if(node->right!=NULL)

                q.push(node->right);

            }

            lz.push_back(l);    

        }

        return lz;

    }

解题感悟:

判空时要注意,while(q.empty()==0) 容易出错,while(!q)错误。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二叉树