题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
练习地址
实现
方法:一个队列
/** PrintTopToBottom
* 从上到下打印二叉树
* 1
* 2 3
* 4 5
* 从上到下按层顺序打印 12345
* ps:一个队列*/
/**32.1从上到下打印二叉树_不分行从上到下打印二叉树*/
public class C32_tree_PrintTree1 {
static class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this.val = val;
}
}
static class Solution{
public ArrayList<Integer> printFromTopToBottom(TreeNode root){
ArrayList<Integer> list =new ArrayList<>();
Queue<TreeNode> queue = new LinkedList<>();
if(root==null){ return list; }
list.add(root.val);
queue.offer(root); //根进队列
while (!queue.isEmpty()){// 上一层节点出队列,并将子节点入队列
TreeNode node = queue.poll();
if(node.left!=null){
queue.offer(node.left);
list.add(node.left.val);
}
if(node.right!=null){
queue.offer(node.right);
list.add(node.right.val);
}
}
return list;
}
}
Test
public static void main(String[] args) {
ArrayList<Integer> list =new ArrayList<>();
Solution solution = new Solution();
TreeNode root=new TreeNode(1);
TreeNode root2=new TreeNode(2);
TreeNode root3=new TreeNode(3);
TreeNode root4=new TreeNode(4);
TreeNode root5=new TreeNode(5);
root.left=root2;
root.right=root3;
root2.left=root4;
root2.right=root5;
list = solution.printFromTopToBottom(root);
for (Integer l:list) {
System.out.println(l);
}
}