题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
思路:二叉树层序遍历,使用队列实现。在将元素压入队列的同时,判断左右子节点是否为空,不为空则将左右结点也加如队列中。
代码:
import java.util.*;
/**
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) {
Queue<TreeNode> queue = new LinkedList<TreeNode>();
ArrayList<Integer>list = new ArrayList<Integer>();
if(root == null)return list;
queue.offer(root);
while(!queue.isEmpty()){
TreeNode t = queue.poll();
list.add(t.val);
if(t.left != null)queue.offer(t.left);
if(t.right != null)queue.offer(t.right);
}
return list;
}
}
补充:
层序遍历:
设二叉树的根节点所在层数为1,层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第2层上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问树的结点的过程就是层序遍历。
实现过程:
- 首先将二叉树的根节点push到队列中,判断队列不为NULL,就输出队头的元素,
- 判断节点如果有孩子,就将孩子push到队列中,
- 遍历过的节点出队列,
- 循环以上操作,直到Tree == NULL。