创建层次二叉树

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);

	}
}

如上所示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值