题目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/7/trees/50/
题目描述:
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
例如:
给定二叉树: [3,9,20,null,null,15,7]
,
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
思路: 一开始想用递归。但是没想出来。还是要看大神的解法。。
第一种解法递归法:
第二种解法迭代法:
//递归法:
class Solution {
private void levelOrderHelper(TreeNode root, int level, List<List> result) {
if(root ==null) {
return;
}
//we reached a new level
if(result.size()< level) {
List curr = new ArrayList();
curr.add(root.val);
result.add(curr);
}
else{
result.get(level-1).add(root.val);
}
levelOrderHelper(root.left, level+1,result);
levelOrderHelper(root.right, level+1,result);
}
public List<List> levelOrder(TreeNode root) {
List<List> res = new ArrayList<>();
levelOrderHelper(root,1,res);
return res;
}
}
//迭代法:
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> result = new ArrayList<>();//保存每一层的列表。
if (root == null)
return result;
Queue<TreeNode> queue = new LinkedList<>();//利用队列进行数据保存
queue.offer(root);//offer()添加一个元素,如果队列满了返回false
while (!queue.isEmpty()){
List<Integer> levellist = new ArrayList<>();
int level = queue.size();
for(int i=1; i<=level; i++){
TreeNode p = queue.poll();//取出队列头的元素,如果队列为空返回NULL;
levellist.add(p.val);
if (p.left != null) queue.offer(p.left);//如果有子节点队列长度加一
if (p.right != null) queue.offer(p.right);//循环也会加一。
}
result.add(levellist);
}
return result;
}
}