题目
解法
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 printTreeMultiLines(BSTNode<Integer> tree) {
if (tree == null) {
return;
}
List<BSTNode> mList = new LinkedList<>();
int number = 1;
int size = 0;
mList.add(tree);
while (mList.size() > 0) {
// 当前结点
BSTNode currentNode = mList.remove(0);
number--;
System.out.print(currentNode.key + " ");
// 左子树
if (currentNode.left != null) {
mList.add(currentNode.left);
size++;
}
// 右子树
if (currentNode.right != null) {
mList.add(currentNode.right);
size++;
}
// 重置
if (number == 0) {
System.out.println();
number = size;
size = 0;
}
}
}
/**
* 通过递归方式打印
*
* @param tree
*/
public static void printTreeMultiLineRecursive(BSTNode<Integer> tree) {
List<ArrayList<Integer>> list = new ArrayList<>();
depthAddData(tree, 1, list);
for (ArrayList i : list) {
System.out.println(i);
}
}
private static void depthAddData(BSTNode<Integer> tree, int depth, List<ArrayList<Integer>> list) {
if (tree == null) return;
if (depth > list.size()) {
list.add(new ArrayList<>());
}
list.get(depth - 1).add(tree.key);
depthAddData(tree.left, depth + 1, list);
depthAddData(tree.right, depth + 1, list);
}