Given inorder and postorder traversal of a tree, construct the binary tree.
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; } * } */
//从中序与后序遍历构建树,思想与上一题一样 //唯一区别是后序遍历的尾为root,而先序遍历的首为root public class Solution { public int findRoot(int[] inorder, int key){ //在中序遍历中定位root if(inorder.length==0) return -1; int index = -1; for(int i=0; i<inorder.length; i++){ if(inorder[i]==key){ index = i; break; } } return index; } //通过递归实现构建树的主逻辑 public TreeNode buildTree(int[] inorder, int[] postorder, int instart, int inend, int postart, int poend){ if(inorder.length==0 || postorder.length==0) return null; if(instart > inend) return null; TreeNode root = new TreeNode(postorder[poend]); int index = findRoot(inorder, root.val); root.left = buildTree(inorder, postorder, instart, index-1, postart, postart+index-1-instart); root.right = buildTree(inorder, postorder, index+1, inend, postart+index-1-instart+1, poend-1); return root; } //****leetcode主函数**** public TreeNode buildTree(int[] inorder, int[] postorder) { return buildTree(inorder, postorder, 0, inorder.length-1, 0, postorder.length-1); } }