题目描述:
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
思路:可借助队列对树进行层次遍历。可先将树的根节点加入队列,当根节点元素出队列的时候,将根节点的左右子树加入队列,当左子树出队列时,将左子树的左右节点加入队列,...依次进行。
代码:
package offer;
import sun.reflect.generics.tree.Tree;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
public class TestNo22 {
static class TreeNode{
int val;
TreeNode left;
TreeNode right;
TreeNode(int x){
val = x;
}
}
public static void main(String[] args) {
TreeNode root =new TreeNode(0);
TreeNode node1 = new TreeNode(1);
TreeNode node2 = new TreeNode(2);
TreeNode node3 = new TreeNode(5);
root.left = node1;
root.right = node2;
node1.left = node3;
System.out.println(new TestNo22().PrintFromTopToBottom(root));
}
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<Integer> list = new ArrayList<Integer>();
if(root == null){
return list;
}
//初始化队列
Queue<TreeNode> q = new LinkedList();
q.add(root);
//处理当前的节点
TreeNode curNode;
while (!q.isEmpty()){
curNode = q.poll();
list.add(curNode.val);
//当前节点的左子树进入队列
if(curNode.left!=null){
q.offer(curNode.left);
}
//当前节点的右子树进入队伍
if(curNode.right != null){
q.offer(curNode.right);
}
}
return list;
}
}