Construct Binary Tree from Inorder and Postorder Traversal
Description
Given inorder and postorder traversal of a tree, construct the binary tree.
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/**
* @param inorder: A list of integers that inorder traversal of a tree
* @param postorder: A list of integers that postorder traversal of a tree
* @return: Root of a tree
*/
public TreeNode buildTree(int[] inorder, int[] postorder) {
// write your code here
if(inorder == null || postorder == null || inorder.length == 0 || postorder.length == 0){
return null ;
}
HashMap<Integer,Integer> map = new HashMap<>();
for(int i=0 ; i < inorder.length; i++){
map.put(inorder[i],i) ;
}
return helper(inorder,postorder,0,inorder.length-1,0,postorder.length-1,map);
}
public TreeNode helper(int[] inorder , int[] postorder, int inL ,int inR, int postL, int postR,HashMap<Integer,Integer> map ){
if(inL > inR || postL > postR){
return null ;
}
TreeNode root = new TreeNode(postorder[postR]);
int index = map.get(root.val);
root.left = helper(inorder,postorder,inL,index-1,postL,postL+(index-inL)-1,map);
root.right = helper(inorder,postorder,index+1,inR,postR-(inR-index),postR-1,map);
return root ;
}
}
该博客介绍了如何根据给定的二叉树中序和后序遍历结果,利用递归算法重建原始二叉树。解决方案包括创建一个辅助函数,首先找到根节点,然后分别构建左子树和右子树,直至所有节点都被处理。
247

被折叠的 条评论
为什么被折叠?



