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);
}
}
<剑指offer 面试题7-2>重建二叉树 Java
最新推荐文章于 2023-04-21 09:53:49 发布