/**
* 二叉树的生成
*/
public static ArrayList<ArrayList<Object>> PrintFromTopToBottom(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>();
ArrayList<ArrayList<Object>> ret = new ArrayList<>();
queue.add(root);
while (!queue.isEmpty()) {
int cnt = queue.size();
ArrayList<Object> arr = new ArrayList<>();
while (cnt-- > 0) {
TreeNode t = queue.poll();
// if (t == null || t.data.equals("#"))
// continue;
arr.add(t.data);
queue.add(t.left);
queue.add(t.right);
}
if (arr.size() != 0)
ret.add(arr);
}
return ret;
}
static class TreeNode {
Object data;
TreeNode left;
TreeNode right;
public TreeNode() {
}
public TreeNode(Object data, TreeNode left, TreeNode right) {
this.data = data;
this.left = left;
this.right = right;
}
}
public static TreeNode arrayToBTree(Object[] arrs) {
List<TreeNode> nodes = new ArrayList<>(arrs.length);
for (Object obj : arrs) {
TreeNode treeNode = new TreeNode();
treeNode.data = obj;
nodes.add(treeNode);
}
for (int i = 0; i < arrs.length/2 - 1; i++) {
TreeNode node = nodes.get(i);
node.left = nodes.get(i*2 + 1);
node.right = nodes.get(i*2 + 2);
}
// 只有当总节点数是奇数时,最后一个父节点才有右子节点
int lastPNodeIndex = arrs.length/2 - 1;
TreeNode lastPNode = nodes.get(lastPNodeIndex);
lastPNode.left = nodes.get(lastPNodeIndex*2 + 1);
if (arrs.length%2 != 0) {
lastPNode.right = nodes.get(lastPNodeIndex*2 + 2);
}
return nodes.get(0);
}