Question:
Given inorder and postorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
/** * Definition for binary tree * 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(postorder.length<1) return null; return subBuild(inorder,0,inorder.length-1,postorder,0,postorder.length-1); } private TreeNode subBuild(int[] inorder, int instart, int inend, int[] postorder, int poststart, int postend) { int root = postorder[postend]; TreeNode tn = new TreeNode(root); if(instart==inend) return tn; int index = instart; while(inorder[index]!=root){ index++; } int leftlen = index-instart-1; int rightlen = inend-index-1; if(index!=instart){ tn.left = subBuild(inorder, instart, index-1, postorder, poststart, poststart+leftlen); }else { tn.left = null; } if(index!=inend){ tn.right = subBuild(inorder, index+1, inend, postorder, postend-1-rightlen, postend-1); }else { tn.right = null; } return tn; } }
leetcode Construct Binary Tree from Inorder and Postorder Traversal 难度系数3 3.38