您的位置:首页 > 职场人生

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

2017-12-28 22:07 681 查看
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);

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: