思想:
last:表示正在打印的当前行的最右节点;
nlast:表示下一行最右节点;
从左到右宽度优先遍历,到last表示该换行了,换行之后,令last=nlast,循环;
import java.util.LinkedList; import java.util.Queue; public class BinTreePrint { private static class binaryTreeNode{ private int val; private binaryTreeNode left; private binaryTreeNode right; public binaryTreeNode() {} public binaryTreeNode(int val) { this.val = val; } } public static void binaryNodePrint(binaryTreeNode root) { Queue<binaryTreeNode> queue = new LinkedList<>(); binaryTreeNode last = root; binaryTreeNode nlast = root; queue.offer(root); while (!queue.isEmpty()) { binaryTreeNode node = queue.poll(); System.out.print(node.val); System.out.print('\t'); if (node.left != null) { queue.offer(node.left); nlast = node.left; } if (node.right != null) { queue.offer(node.right); nlast = node.right; } if (node == last) { System.out.println(); last = nlast; } } } public static void main(String[] args) { binaryTreeNode n1 = new binaryTreeNode(1); binaryTreeNode n2 = new binaryTreeNode(2); binaryTreeNode n3 = new binaryTreeNode(3); binaryTreeNode n4 = new binaryTreeNode(4); binaryTreeNode n5 = new binaryTreeNode(5); binaryTreeNode n6 = new binaryTreeNode(6); binaryTreeNode n7 = new binaryTreeNode(7); binaryTreeNode n8 = new binaryTreeNode(8); n1.left = n2; n1.right = n3; n2.left = n4; n3.left = n5; n3.right = n6; n5.left = n7; n5.right = n8; binaryNodePrint(n1); } }