class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
一、递归的实现
@Test
public void testLevel() {
Integer[] arr = new Integer[]{3,9,20,null,null,15,7};
TreeNode root = createBinaryTreeByArray(arr,0);
}
private TreeNode createBinaryTreeByArray(Integer[] array, int index) {
if (index >= array.length || array[index] == null) {
return null;
}
TreeNode tr = new TreeNode(array[index]);
tr.left = createBinaryTreeByArray(array, 2 * index + 1);
tr.right = createBinaryTreeByArray(array, 2 * index + 2);
return tr;
}
二、循环的实现
@Test
public void testLevel() {
Integer[] arr = new Integer[]{1, 2, 3, 4, 5, 6, 7, 8};
List<TreeNode> treeNodeList = new LinkedList<>();
for (Integer node : arr) {
treeNodeList.add(new TreeNode(node));
}
TreeNode root = createBinaryTreeByArray(treeNodeList);
}
private TreeNode createBinaryTreeByArray(List<TreeNode> treeNodeList) {
for (int i = 0; i < treeNodeList.size() / 2; i++) {
TreeNode tr = treeNodeList.get(i);
if (2 * i + 1 < treeNodeList.size()) {
tr.left = treeNodeList.get(2 * i + 1);
}
if (2 * i + 2 < treeNodeList.size()) {
tr.right = treeNodeList.get(2 * i + 2);
}
}
return treeNodeList.get(0);
}