【剑指offer】26、从上到下打印二叉树
题目要求
从上到下打印二叉树的每个结点,同一层按照从左到右的顺序打印。例如数的结构如下:
1
2 3
4 5 6 7
则依次打印 1、2、3、4、5、6、7
解决方法
打印的顺序是先打印根结点,然后再依次打印左结点和右结点,再继续打印左结点的左右结点。
如果要打印某一个节点的左右节点,需要先获得该节点,然后再打印它的左右节点的值。
利用队列结构,可以保证先进先出。
import java.util.LinkedList;
import java.util.Queue;
/*
* 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
* */
public class Print {
private static class TreeNode {
int data;
TreeNode left;
TreeNode right;
TreeNode(int data) {
this.data = data;
}
}
private static void printOrder(TreeNode root) {
if (root == null)
return;
Queue<TreeNode> queue = new LinkedList<>();
// 先添加根结点
queue.add(root);
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
if (node != null) {
System.out.print(node.data + " ");
if (node.left != null)
queue.offer(node.left);
if (node.right != null)
queue.offer(node.right);
}
}
}
public static void main(String[] args) {
TreeNode root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
root.left.left = new TreeNode(4);
root.left.right = new TreeNode(5);
root.right.left = new TreeNode(6);
root.right.right = new TreeNode(7);
printOrder(root);
System.out.println();
printOrder(null);
root = new TreeNode(1);
root.left = new TreeNode(2);
root.left.left = new TreeNode(3);
root.left.right = new TreeNode(4);
root.left.right.left = new TreeNode(5);
System.out.println();
printOrder(root);
}
}
参考文献:
https://blog.****.net/u013132035/article/details/80604718
https://blog.****.net/weixin_42249629/article/details/82498611