给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层序遍历结果:
[
[3],
[9,20],
[15,7]
]
思路:该题可有BFS和DFS来实现
思路一、BFS:BFS一般和队列queue一起实现
初始化:
List<List
Queue
操作:
queue.isEmpty():判断队列是否为空
queue.poll():返回队列顶元素并删除
代码实现:
//size:用来记录每一层中的元素剩余个数
层序遍历,每当遍历该层节点的时候,将该节点以及其孩子节点都压入队列。
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> result = new ArrayList<>();
if(root == null)
{
return result;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while(!queue.isEmpty())
{
int size = queue.size();
List<Integer> list = new ArrayList<>();
while(size > 0)
{
TreeNode node = queue.poll();
list.add(node.val);
if(node.left!=null)
{
queue.add(node.left);
}
if(node.right != null)
{
queue.add(node.right);
}
size = size - 1;
}
result.add(list.copy());
}
return result;
思路二、DFS:DFS一般用递归实现
代码实现:
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> result = new ArrayList<>();
if(root == null)
{
return result;
}
dfs(root,result,0);
return result;
}
public void dfs(TreeNode root,List<List<Integer>> result,int level)
{
if(root == null)
{
return; //如果节点为空,则返回
}
if(level > result.size() - 1)
{
result.add(new ArrayList<Integer>());//如果当前result没有对应层级的相应索引,则添加
}
result.get(level).add(root.val);//将对应层级元素的值添加到对应索引中
if(root.left != null)
{
dfs(root.left,result,level++);//开始向下递归
}
if(root.right != null)
{
dfs(root.right,result,level++);//开始向下递归
}
}
想养一只猫。
浙公网安备 33010602011771号