【tree】【 由中根序遍历与后根序遍历生成树】【由先根序与中根序遍历生成树】

来源:互联网 发布:快讯通 看盘软件 编辑:程序博客网 时间:2024/05/05 19:39

递归思想,找到根节点,问题便分解为左子树与右子树

leetcode 106. Construct Binary Tree from Inorder and Postorder Traversal


/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public TreeNode buildTree(int[] inorder, int[] postorder) {          int size = inorder.length;         if(size==0) return null;         return buildTreefromin_post(inorder, 0, size-1, postorder, 0, size-1);     }        private TreeNode buildTreefromin_post(int[] inorder, int l_in, int r_in,                                         int[] postorder, int l_p, int r_p){         TreeNode root = new TreeNode(0);          // System.out.println(l_in);         // System.out.println(r_in);         root.val = postorder[r_p];         if(l_in==r_in)  return root;         int mid = 0;         for(int k=l_in;k<=r_in;k++){             if(inorder[k]==root.val){                 mid = k;                 break;             }         }         // System.out.println(mid);         if(l_in<=mid-1){            root.left = buildTreefromin_post(inorder, l_in, mid-1, postorder, l_p, l_p + mid-1-l_in);         }         if(mid+1<=r_in){            root.right = buildTreefromin_post(inorder, mid+1, r_in, postorder, r_p-1+mid+1-r_in , r_p-1);         }         return root;    }}


105. Construct Binary Tree from Preorder and Inorder Traversal

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public TreeNode buildTree(int[] preorder, int[] inorder) {         int size = inorder.length;         if(size==0) return null;         return buildTreefromin_post(inorder, 0, size-1, preorder, 0, size-1);     }        private TreeNode buildTreefromin_post(int[] inorder, int l_in, int r_in,                                          int[] preorder, int l_p, int r_p){         TreeNode root = new TreeNode(0);          // System.out.println(l_in);         // System.out.println(r_in);         root.val = preorder[l_p];         if(l_in==r_in)  return root;         int mid = 0;         for(int k=l_in;k<=r_in;k++){             if(inorder[k]==root.val){                 mid = k;                 break;             }         }         // System.out.println(mid);         if(l_in<=mid-1){            root.left = buildTreefromin_post(inorder, l_in, mid-1, preorder, l_p+1, l_p + mid-l_in);         }         if(mid+1<=r_in){            root.right = buildTreefromin_post(inorder, mid+1, r_in, preorder, r_p+mid+1-r_in , r_p);         }         return root;    }}


阅读全文
0 0
原创粉丝点击