一、數組和二叉樹的關系
二叉樹可以通過數組來進行存儲。https://www.cnblogs.com/Brake/p/15058906.html
數組從0開始,如果父節點在數組中的下標是i,那么其左二子在數組中對應的下標則為2i+1。右兒子子對應的下標為2i+2。
同理,已知某節點在數組中對應的下標為i,那么其父親節點對應的下標為i/2;
二、將數組轉換為二叉樹
基於上述二叉樹和數組的關系,轉換代碼如下。
先建立TreeNode數據結構
private Integer value;
private TreeNode left;
private TreeNode right;
public Integer getValue() {
return value;
}
public void setValue(Integer value) {
this.value = value;
}
public TreeNode getLeft() {
return left;
}
public void setLeft(TreeNode left) {
this.left = left;
}
public TreeNode getRight() {
return right;
}
public void setRight(TreeNode right) {
this.right = right;
}
}
使用遞歸進行轉換:
public static TreeNode createTree(int rootIndex, List<Integer> values) {
if (rootIndex >= values.size()) {
return null;
}
TreeNode rootNode = new TreeNode();
rootNode.setValue(values.get(rootIndex));
rootNode.setLeft(createTree(2 * rootIndex + 1, values));
rootNode.setRight(createTree(2 * rootIndex + 2, values));
return rootNode;
}
通過數組轉換的二叉樹是一顆完全二叉樹。
測試代碼:
private TreeNode createTree() {
List<Integer> values = new ArrayList<>();
for (int i = 1; i <= 6; i++)
values.add(i);
return TreeUtil.createTree(0, values);
}
