输入数组:
[8, 3, 10, 1, 6, null, 14, null, null, 4, 7, 13]
生成二叉树:
定义二叉树实体类:
class TreeNode{
Integer val;
TreeNode left;
TreeNode right;
TreeNode(){
}
TreeNode(Integer val){
this.val = val;
}
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
读取数组层次生成二叉树:
//读取数组层次生成二叉树
public TreeNode createTree(TreeNode root, Queue<Integer> numsLinked) {
if (numsLinked.isEmpty()) return null;
Queue<TreeNode> temp = new LinkedList<>();
root.val = numsLinked.poll();
temp.add(root);
while (!numsLinked.isEmpty() && !temp.isEmpty()){
TreeNode node = temp.poll();
if (node.val != null && !numsLinked.isEmpty()){
node.left = new TreeNode(numsLinked.poll());
temp.add(node.left);
}
if (node.val != null && !numsLinked.isEmpty()){
node.right = new TreeNode(numsLinked.poll());
temp.add(node.right);
}
}
return root;
}
以数组形式层次输出树结构:
//以数组形式层次输出树结构
public List<Integer> printTree(TreeNode treeNode){
List<Integer> res = new ArrayList<>();
Queue<TreeNode> linkedList = new LinkedList<>();
if (treeNode != null){
linkedList.add(treeNode);
while (!linkedList.isEmpty()){
TreeNode t = linkedList.poll();
res.add(t.val);
if (t.left != null)
linkedList.add(t.left);
if (t.right != null){
linkedList.add(t.right);
}
}
}
return res;
}
测试:
@Test
public void huiWen() throws InterruptedException {
Integer[] nums = new Integer[]{8, 3, 10, 1, 6, null, 14, null, null, 4, 7, 13};
Queue<Integer> numsLinked = new LinkedList<>();
for (Integer num : nums){
numsLinked.add(num);
}
System.out.print("[");
printTree(createTree(new TreeNode(), numsLinked)).forEach(t -> System.out.print(t + ", "));
System.out.print("]");
}