二叉树层次遍历-LintCode

给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)
给一棵二叉树 {3,9,20,#,#,15,7}
二叉树层次遍历-LintCode_第1张图片
遍历结果:
[
[3],
[9,20],
[15,7]
]
主要思想:
为了层次遍历,就要一层一层地处理数据。先将根节点入队,之后搜寻其左子树与右子树,若非空,则入队,并将根节点出队。按照此方法,依此处理。

#ifndef C69_H
#define C69_H
#include
#include
#include
using namespace std;
class TreeNode{
public:
    int val;
    TreeNode *left, *right;
    TreeNode(int val)
    {
        this->val = val;
        this->left = this->right = NULL;
    }
};
class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode *root) {
        // write your code here
        vector<vector<int>> v;
        queue Q;//构建队列Q,元素为TreeNode
        if (root == NULL)
            return v;
        Q.push(root);
        while (!Q.empty())
        {
            int size = Q.size();//保证结点处于同一层次
            vector<int> val;
            for (int i = 0; i < size; ++i)
            {
                TreeNode *head = Q.front();//取队首元素
                Q.pop();                  //元素出队
                val.push_back(head->val);//将head的值压入val中
                if (head->left != NULL) //head左子树不为空,将其左子树入队 
                    Q.push(head->left);
                if (head->right != NULL)//head右子树不为空,将其右子树入队
                    Q.push(head->right);
            }
            v.push_back(val);
        }
        return v;
    }
};
#endif

得到结果:
二叉树层次遍历-LintCode_第2张图片

你可能感兴趣的:(LintCode)