1、层经尝试着用递归实现二叉树的层次创建,但是失败了。如下语言所示,分析可能还是return root上面的两句中,执行完第一句之后,i 发生了变化,但还不是太明白:
public class ErChaShu {
public TreeNode root;
// public int counter;
public ErChaShu(){
root = null;
}
public void preOrder(TreeNode node){
if(node != null){
System.out.println(node.val);
preOrder(node.left);
preOrder(node.right);
}
}
public TreeNode createTree(int[] ints,int i){
if(ints.length==0 || i>=ints.length){
return null;
}else{
System.out.println(i);
TreeNode root = new TreeNode(ints[i]);
root.left = createTree(ints,++i);
root.right= createTree(ints,++i);
return root;
}
}
}
后来还是参考了一下网上的程序,找了一下规律,才成功:
public class MyCengBuildTree {
private TreeNode root;
public TreeNode getTree(){
return root;
}
public void createTree(int[] ints){
TreeNode[] treeNodes = new TreeNode[ints.length];
int i = 0;
for(int intE:ints){
treeNodes[i++] = new TreeNode(intE);
}
for(int parentIndex = 0; parentIndex < ints.length/2-1;parentIndex++){
treeNodes[parentIndex].left= treeNodes[(parentIndex+1)*2-1];
treeNodes[parentIndex].right= treeNodes[(parentIndex+1)*2];
}
if(ints.length%2==0){
treeNodes[ints.length/2-1].left= treeNodes[ints.length-1];
}else{
treeNodes[ints.length/2-1].left= treeNodes[ints.length-2];
treeNodes[ints.length/2-1].right= treeNodes[ints.length-1];
}
root = treeNodes[0];
}
public void preOrder(TreeNode root){
if(root == null){
return;
}
preOrder(root.left);
System.out.println(root.val);
preOrder(root.right);
}
}
如上所示。