题目
*之字形打印二叉树
解法
- 构建二叉树
public class BSTNode<T extends Comparable<T>> {
T key;
BSTNode<T> left;
BSTNode<T> right;
BSTNode<T> parent;
public BSTNode(T key, BSTNode<T> parent, BSTNode<T> left, BSTNode<T> right) {
this.key = key;
this.parent = parent;
this.left = left;
this.right = right;
}
}
- 之字形打印
/**
* 之字形打印树
*
* @param tree
*/
public static void printTreeZhi(BSTNode<Integer> tree) {
if (tree == null) return;
// 定义两个list
List<BSTNode> order = new LinkedList<>();
List<BSTNode> reverse = new LinkedList<>();
// 顺序逆序flag
boolean flag = true;
order.add(tree);
while (!order.isEmpty()) {
// 从最后一个索引开始取
BSTNode current = order.remove(order.size() - 1);
System.out.print(current.key + " ");
// 顺序
if (flag) {
if (current.left != null) {
reverse.add(current.left);
}
if (current.right != null) {
reverse.add(current.right);
}
} else {
// 逆序
if (current.right != null) {
reverse.add(current.right);
}
if (current.left != null) {
reverse.add(current.left);
}
}
// 换行
if (order.size() == 0) {
flag = !flag;
// 两个list 数据互换
List<BSTNode> temp = reverse;
reverse = order;
order = temp;
System.out.println();
}
}
}