public TreeNode reConstructBinaryTree(int [] pre,int [] in) { return build(pre,0,pre.length-1,in,0,in.length-1); } public TreeNode build(int[]preorder,int start1,int end1,int[]inorder,int start2,int end2){ if(start1>end1||start2>end2) return null; int rootval=preorder[start1]; //前序第一个结点为根 System.out.print(rootval+" "); TreeNode root=new TreeNode(rootval); int index=indexfindinorder(inorder,start2,end2,rootval);//在中序找到该根节点下标 root.left=build(preorder,start1+1,index+start1,inorder,start2,start2+index-1);//左子树 root.right=build(preorder,index+start1+1,end1,inorder,start2+index+1,end2);//右子树 return root; } private int indexfindinorder(int[] inorder, int start, int end,int rootval) {//在中序找到该根节点下标 int count=0; for(int i=start;i<=end;i++){ if(inorder[i]==rootval)return count; count++; } return -1; }
重建二叉树(根据前序和中序遍历结果)
最新推荐文章于 2019-10-03 11:49:23 发布