题目
从上到下打印出二叉树的每个节点,每层的节点按照从左到右的顺序打印。
例子:
打印顺序:8,6,10,5,7,9,11
二叉树节点定义:
class TreeNode{
public int value;
public TreeNode left;
public TreeNode right;
public TreeNode(int a){
value = a;
left = null;
right = null;
}
}
思路:
本题实际上是层序遍历二叉树,根据题目特点,选用队列来存储相应节点,每次取出队列头部元素,如果该元素有子节点,将子节点放入队列中,如此循环。
代码
public static void printFromTopToBottom(TreeNode t){
if(t == null)return;
Queue<TreeNode> q = new LinkedList<>();
q.offer(t);
while(!q.isEmpty()){
TreeNode temp = q.remove();
System.out.print(temp.value + " ");
if(temp.left != null)q.offer(temp.left);
if(temp.right != null)q.offer(temp.right);
}
}
测试以及结果
public static void main(String args[]) {
TreeNode t1 = new TreeNode(8);
TreeNode t2 = new TreeNode(6);
TreeNode t3 = new TreeNode(10);
TreeNode t4 = new TreeNode(5);
TreeNode t5 = new TreeNode(7);
TreeNode t6 = new TreeNode(9);
TreeNode t7 = new TreeNode(11);
t1.left = t2;
t1.right = t3;
t2.left = t4;
t2.right = t5;
t3.left = t6;
t3.right = t7;
printFromTopToBottom(t1);
}
总结
本题区别与二叉树的前中后序遍历,它们都是通过栈数据结构来实现存储节点。本题的思考可以通过举例子的方法,模仿遍历过程,发现规律。