- Binary Tree Level Order Traversa
- Binary Tree Level Order Traversa
- Binary Tree Level Order Traversa
- Binary Tree Level Order Traversa
- Binary Tree Level Order Traversa
- Binary Tree Level Order Traversa
- Binary Tree Level Order Traversa
- Binary Tree Level Order Traversa
- Binary Tree Level Order Traversa
- Binary Tree Level Order Traversa
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;
}
网友评论