一,经常见到的是利用下标数值关系。
例如:https://blog.csdn.net/luzhensmart/article/details/101687963
二,本文使用简单的队列,更易理解,更方便使用
import java.util.LinkedList;
import java.util.Queue;
public class ArrtoBintree {
static class Node{
int val;
Node left;
Node right;
public Node(int val) {
this.val = val;
}
}
public static void main(String[] args) {
Integer[] nums = {1,2,3,4,5};
Node root = NodeUtil(nums);
dfs(root);
}
//造二叉树函数
static public Node NodeUtil(Integer[] nums) {
if(nums.length == 0) {
return null;
}
Node root = new Node(nums[0]);
Queue<Node> queue = new LinkedList<ArrtoBintree.Node>();
queue.offer(root);
boolean isleft = true;
for(int i = 1; i < nums.length; ++i) {
//peek不是拉出队列。
Node tmp = queue.peek();
if(isleft) {
if(nums[i] != null) {
tmp.left = new Node(nums[i]);
queue.offer(tmp.left);
}
isleft = false;
}else {
if(nums[i] != null) {
tmp.right = new Node(nums[i]);
queue.offer(tmp.right);
}
//一个节点造完了,拉出队列。
queue.poll();
isleft = true;
}
}
return root;
}
//这个简单的前序遍历看看结果的。
static void dfs(Node root) {
if(root == null) {
return;
}
System.out.println(root.val);
dfs(root.left);
dfs(root.right);
}
}