LeetCode 102:Binary Tree Level Order Traversal
Posted 一只菜鸡的奋斗史
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 102:Binary Tree Level Order Traversal相关的知识,希望对你有一定的参考价值。
题意描述
给定一个二叉树,返回其节点值的层数顺序遍历。 (即,从左到右,逐级)。
测试用例
Given binary tree
[3,9,20,null,null,15,7]
,3 / 9 20 / 15 7
return its level order traversal as:
[ [3], [9,20], [15,7] ]
解题思路
一、思路一
- 使用递归,根据树深度判断节点值应该添加入集合的哪个位置。
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
if(root == null) return res;
travel(root,res,0);
return res;
}
private void travel(TreeNode root,List<List<Integer>> res,int depth){
if(root == null) return;
List<Integer> list;
if(depth >= res.size()){ //深度》=集合大小,说明没有合适的位置存放节点值
list = new ArrayList<>(); //创建新List
list.add(root.val);
res.add(list);
}else{ //res中存在合适的位置
list = res.get(depth);
list.add(root.val);
}
travel(root.left,res,depth+1);
travel(root.right,res,depth+1);
}
二、思路二
- 使用队列,记录每层的节点个数,添加入List集合
- 本层节点遍历完毕,将节点添加入新List
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
if(root == null) return res;
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
int size = 0;
while(!queue.isEmpty()){
//每层遍历之前船舰新List
List<Integer> list = new ArrayList<>();
size = queue.size();//计算本层的节点总数
while(size != 0){
root = queue.poll();
if(root != null){
list.add(root.val);
}
if(root.left != null){
queue.add(root.left);
}
if(root.right != null){
queue.add(root.right);
}
size --;//每遍历一个节点,本层数量--
}
res.add(list);
}
return res;
}
以上是关于LeetCode 102:Binary Tree Level Order Traversal的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode 102. Binary Tree Level Order Traversal
[LeetCode]题解(python):102- Binary Tree Level Order Traversal
LeetCode 102. Binary Tree Level Order Traversal
Leetcode 102. Binary Tree Level Order Traversal