剑指offer_【22】从上到下打印二叉树

1.题目描述

从上往下打印出二叉树的每个节点,同层节点从左至右打印。

2.解题思路

使用两个队列一个存放节点treelist,一个存放值intlist。

先将根节点root加入到队列中,然后遍历队列中的元素,遍历过程中,访问该元素的左右节点,再将左右子节点加入到队列中来,并将root值存入intlist,遍历结束条件是i值到达treelist.size-1

3.代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import java.util.ArrayList;
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;

public TreeNode(int val) {
this.val = val;

}

}
*/
public class Solution {
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
//创建一个列表用来存储节点
ArrayList<TreeNode> treelist=new ArrayList<TreeNode>();
ArrayList<Integer> intlist=new ArrayList<Integer>();

if(root==null) //没有节点
return intlist;
//1.先存入根节点
treelist.add(root);
//2.循环遍历列表,一开始列表里存了root
for(int i=0;i<treelist.size();i++)
{
TreeNode node=treelist.get(i);

//3.如果左子节点不为空,则将节点加入列表
if(node.left!=null)
treelist.add(node.left);
//3、如果右子节点不为空,则将右子节点加入到列表中,这时列表的size加1
if(node.right!=null)
treelist.add(node.right);

intlist.add(node.val);
//4、因为执行上面操作后会增加列表的size
//因此可以继续循环下一个节点,直到循环完所有节点
}
return intlist;
}
}
文章目录
  1. 1. 1.题目描述
  2. 2. 2.解题思路
  3. 3. 3.代码
| 139.6k