目录
序言
平时leetcode上面二叉树结构常常用的是TreeNode的形式
在面试中常常需要自己构建二叉树,此时建议实现二叉树的数组构建形式
因此我想到通过 数组转树 来理解更好的理解二叉树的数组构建形式。
数组结构
二叉树数组结构就是完全二叉树,只不过其中的坐标为left=2*pos+1,right=left+1;
因此操作左右孩子时可以通过坐标来操作。
代码
public class Main {
class TreeNode {
int val;
TreeNode left, right;
public TreeNode() {
}
public TreeNode(int val) {
this.val = val;
}
public TreeNode(TreeNode left, TreeNode right) {
this.left = left;
this.right = right;
}
}
public static void main(String[] args) {
new Main().solution();
}
private void solution() {
//二叉树数组按照完全二叉树实现
//-1表示null
int[] treeArray = new int[]{0, 1, 2, -1, 4, -1, 6};
TreeNode tree = new TreeNode(treeArray[0]);
ArrayToTreeNode(tree, 0, treeArray, treeArray.length);
/* 树结构如下
0
* 1 2
* null 4 null 6
*/
//0 1 4 2 6
preorder(tree);
}
private void preorder(TreeNode node) {
if (node == null) return;
System.out.println(node.val);
preorder(node.left);
preorder(node.right);
}
private void ArrayToTreeNode(TreeNode node, int index, int[] treeArray, int n) {
if (index >= n || node == null) return;
int left = 2 * index + 1, right = left + 1;
if (left < n)
node.left = treeArray[left] == -1 ? null : new TreeNode(treeArray[left]);
if (right < n)
node.right = treeArray[right] == -1 ? null : new TreeNode(treeArray[right]);
ArrayToTreeNode(node.left, left, treeArray, n);
ArrayToTreeNode(node.right, right, treeArray, n);
}
}