Construct Binary Tree from Inorder and Postorder Traversal

来源:互联网 发布:尚硅谷 java视频 编辑:程序博客网 时间:2024/06/11 10:27

Given inorder and postorder traversal of a tree, construct the binary tree.

Note:
You may assume that duplicates do not exist in the tree.

思路:

inorder: left, current, right;

postorder, left, right, current;

postorder最后一个是current, 然后在inorder中搜索current index,然后左边的是left,右边的是right。算出左边的size之后,计算postorder的left,right index;

/**  * 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) {         if(inorder == null || postorder == null ||  inorder.length != postorder.length) return null;         return build(inorder, 0, inorder.length-1, postorder, 0, postorder.length-1);     }          public TreeNode build(int[]  inorder, int istart, int iend, int[] postorder, int pstart, int pend) {         if(istart> iend || pstart>pend){             return null;         }         TreeNode node = new TreeNode(postorder[pend]);         int index = 0;         for(int i=istart; i<=iend;i++){             if(inorder[i] == postorder[pend]){                 index = i;                 break;             }         }         node.left = build(inorder, istart, index-1, postorder, pstart, pstart+index-istart-1);         node.right = build(inorder, index+1, iend, postorder, pstart+index-istart, pend-1);         return node;     } }


0 0