LeetCode | Binary Tree Level Order Traversal(二叉树层序遍历)


Given a binary tree, return the level order traversal of its nodes’ values. (ie, from left to right, level by level).

For example:
Given binary tree {3,9,20,#,#,15,7},

    3
   / \
  9  20
    /  \
   15   7

return its level order traversal as:

[
  [3],
  [9,20],
  [15,7]
]

题目解析:

层序遍历,设置队列,入队列出队列即可。

为了能够更方便的操作,可以设置两个队列,当对队列1进行出队列,将其子孩子放入队列2中。遍历完后,将队列2中元素赋值给队列1。

另外一种是只用一个队列实现。当开始进行下一层循环时,用个变量n保存当前队列中元素的个数。然后for循环n次,将n个结点的子节点放入队列。下次循环时,再求一次n,就得到新的一层的子节点个数。注意,这里不能i<queue.size(),必须用n,因为我们动态向队列中添加元素。

class Solution {
public:
    vector<vector<int> > levelOrder(TreeNode *root) {
        if(root == NULL)
            return res;
        queue<TreeNode *> tree;
        tree.push(root);
        while(!tree.empty()){
            vector<int> node;
            TreeNode *p;
            int n = tree.size();    //如果用一个队列完成的话,必须先保存队列中的值,队列的值会重新计算。
            for(int i = 0;i < n;i++){
                p = tree.front();
                tree.pop();
                if(p->left) tree.push(p->left);
                if(p->right) tree.push(p->right);
                node.push_back(p->val);
            }
            res.push_back(node);
        }

        return res;
    }
private:
    vector<vector<int> > res;
};

点赞