美文网首页
Binary Tree Level Order Traversa

Binary Tree Level Order Traversa

作者: ab409 | 来源:发表于2015-12-14 20:32 被阅读151次

Binary Tree Level Order Traversal


今天是一道有关二叉树的题目,来自LeetCode,难度为Easy,Acceptance为30.6%

题目如下


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]
]

解题思路及代码见阅读原文

回复0000查看更多题目

解题思路


首先,老规矩,看到二叉树,想到二叉树的三种遍历方式

然后,这是一道Easy的题目,要实现层次遍历,可以用一个队列,或者直接用前序遍历就可以解决问题。这里采用直接前序遍历的方法更容易。有两个关键点:

  • 用一个参数表示当前的层数,每个节点的子节点的层数+1
  • 因为返回的是一个二维链表,每到一个新层需要生成一个字链表插入,不能直接get,否则会出现空指针。

最后,我们来看代码。

代码如下


Java版

public List<List<Integer>> levelOrder(TreeNode root) {
    List<List<Integer>> res = new ArrayList<List<Integer>>();
    levelHelper(res, root, 0);
    return res;
}

public void levelHelper(List<List<Integer>> res, TreeNode root, int height) {
    if (root == null) return;
    if (height >= res.size()) {
        res.add(new LinkedList<Integer>());
    }
    res.get(height).add(root.val);
    levelHelper(res, root.left, height+1);
    levelHelper(res, root.right, height+1);
}

C++版

vector<vector<int>> ret;

void buildVector(TreeNode *root, int depth)
{
    if(root == NULL) return;
    if(ret.size() == depth)
        ret.push_back(vector<int>());

    ret[depth].push_back(root->val);
    buildVector(root->left, depth + 1);
    buildVector(root->right, depth + 1);
}

vector<vector<int> > levelOrder(TreeNode *root) {
    buildVector(root, 0);
    return ret;
}

相关文章

网友评论

      本文标题:Binary Tree Level Order Traversa

      本文链接:https://www.haomeiwen.com/subject/dssuhttx.html