【검지 Offer】04, 두 갈래 나무 재건

6137 단어
제목 설명
두 갈래 나무의 앞 순서와 중간 순서의 결과를 입력하십시오. 이 두 갈래 나무를 다시 만드십시오.입력한 앞 순서와 중간 순서의 결과에 중복된 숫자가 없다고 가정하십시오.예를 들어 앞 순서 반복 시퀀스 {1,2,4,7,3,5,6,8}와 중간 순서 반복 시퀀스 {4,7,2,1,5,3,8,6}를 입력하면 두 갈래 트리를 재건하고 되돌려줍니다.
문제: 귀속
 1 public static TreeNode reConstructBinaryTree(int[] pre,int[] in) {
 2         if(pre.length==0||in.length==0){
 3             return null;
 4         }
 5         TreeNode treeNode = new TreeNode(pre[0]);
 6         for(int i=0;i){
 7             if(in[i]==pre[0]){
 8                 // 
 9                 int index=i;
10                 treeNode.left = reConstructBinaryTree(Arrays.copyOfRange(pre,1,index+1), Arrays.copyOfRange(in,0,index));
11                 treeNode.right = reConstructBinaryTree(Arrays.copyOfRange(pre,index+1,pre.length), Arrays.copyOfRange(in,index+1,in.length));
12             }
13         }
14         return treeNode;
15     }

구조 정의:
1 public static class TreeNode {
2       int val;
3       TreeNode left;
4       TreeNode right;
5       TreeNode(int x) { val = x; }
6   }

후면 인쇄:
1 // 
2     public static void print(TreeNode root){
3         if(root==null){
4             return;
5         }
6         print(root.left);
7         print(root.right);
8         list.add(root);
9     }

테스트:
 1 static ArrayList list=new ArrayList();
 2     public static void main(String[] args) {
 3         int[] pre={1,2,4,7,3,5,6,8};
 4         int[] in={4,7,2,1,5,3,8,6};
 5         TreeNode treeNode = reConstructBinaryTree(pre, in);
 6         print(treeNode);
 7         for (TreeNode node : list) {
 8            System.out.print(node.val+" ");
 9         }
10     }
11 //12 //7 4 2 5 8 6 3 1

좋은 웹페이지 즐겨찾기