<剑指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); } }
相关文章推荐
- <剑指offer 面试题7-1>构建二叉树以及实现遍历 Java
- 剑指offer面试题6 重建二叉树(java)
- <剑指offer 面试题3> 数组中重复的数字(Java实现)
- 剑指offer 面试题6 重建二叉树 java版答案
- 剑指Offer:面试题6——重建二叉树(java实现)
- <剑指offer 面试题5>替换空格(Java)
- 剑指Offer面试题6(Java版):重建二叉树
- <剑指offer 面试题6-1>单项链表的实现 Java实现
- 剑指offer-->面试题6 重建二叉树
- 剑指offer面试题6 重建二叉树(java实现)
- <剑指offer 面试题10_1>斐波那契数列 Java
- 剑指offer-chapter2-面试题6-重建二叉树(java)
- <剑指offer 面试题6-2>从尾到头打印链表 Java
- 剑指Offer面试题6:重建二叉树 Java实现
- 剑指offer面试题6:重建二叉树(Java实现)
- 剑指Offer面试题6(Java版):重建二叉树
- 剑指offer--面试题6:重建二叉树--Java实现
- <剑指offer 面试题8>二叉树的下一个节点(Java)
- 【剑指offer Java】面试题6:重建二叉树
- 剑指offer面试题6 重建二叉树(java)