<剑指offer 面试题7-2>重建二叉树 Java

package 剑指offer;

import java.util.Arrays;

import org.omg.CORBA.REBIND;

public class Interview7 {
	/**
	 * 题目:重建二叉树
	 * 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树,
	 * 假设输入的前序遍历和中序遍历的结果中都不和重复的数字。
	 * 例如,输入的前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历{4,7,2,1,5,3,8,6}
	 * 则重建如图所示的二叉树并输出他的头结点
	 * 思路:前序遍历中的第一个是根节点,中序遍历中找到与前序遍历相同的那个数,然后前面的就是左子树,所以前序遍历中根节点后的几个就属于左子树的。
	 * 以此类推
	 *          1
	 *    2            3
	 *4            5      6
	 *  7               8
	 */
	public class BinaryTreeNode{
		int val;
		BinaryTreeNode leftChild;
		BinaryTreeNode rightChild;
		public BinaryTreeNode(int val){
			this.val = val;
		}
	}
	public static BinaryTreeNode reBuildBinaryTree(int pre[],int order[]){
		//判断输入数据的合法性
		if(pre==null||order==null||pre.length!=order.length)return null;
		Interview7 i7=new Interview7();
		BinaryTreeNode root=null;
		for(int i=0;i<order.length;i++)
		{
			if(order[i]==pre[0])
			{
				//找到根节点
				root=i7.new BinaryTreeNode(order[i]);
				//找到左子树
				root.leftChild=reBuildBinaryTree(Arrays.copyOfRange(pre, 1, i+1), Arrays.copyOfRange(order, 0, i));
				//找到右子树
				root.rightChild=reBuildBinaryTree(Arrays.copyOfRange(pre, i+1, pre.length), Arrays.copyOfRange(order, i+1, order.length));
			}
		}
		return root;
	}
	public static void main(String args[]){
		int pre[]={1,2,4,7,3,5,6,8};
		int order[]={4,7,2,1,5,3,8,6};
		System.out.println(reBuildBinaryTree(pre, order).val);
		
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值