【LeetCode】-Construct Binary Tree from Inorder and Postorder Traversal
2014-09-24 10:42
344 查看
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 {
private int getIndex( int[] nums, int element, int start, int end ){
for( int i=start; i<=end; i++ ){
if( element==nums[i] )
return i;
}
return -1;
}
private TreeNode createTree( int[] in_arr, int in_start, int[] post_arr, int post_start, int length ){
if( length<=0 )
return null;
TreeNode root = new TreeNode( post_arr[post_start+length-1] );
int index = getIndex( in_arr, post_arr[post_start+length-1], in_start, in_start+length );
int len = index - in_start;
root.left = createTree( in_arr, in_start, post_arr, post_start, len );
root.right = createTree( in_arr, index+1, post_arr, post_start+len, length-len-1 );
return root;
}
public TreeNode buildTree(int[] inorder, int[] postorder) {
if( inorder.length!=postorder.length )
return null;
return createTree( inorder, 0, postorder, 0, inorder.length );
}
}
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 {
private int getIndex( int[] nums, int element, int start, int end ){
for( int i=start; i<=end; i++ ){
if( element==nums[i] )
return i;
}
return -1;
}
private TreeNode createTree( int[] in_arr, int in_start, int[] post_arr, int post_start, int length ){
if( length<=0 )
return null;
TreeNode root = new TreeNode( post_arr[post_start+length-1] );
int index = getIndex( in_arr, post_arr[post_start+length-1], in_start, in_start+length );
int len = index - in_start;
root.left = createTree( in_arr, in_start, post_arr, post_start, len );
root.right = createTree( in_arr, index+1, post_arr, post_start+len, length-len-1 );
return root;
}
public TreeNode buildTree(int[] inorder, int[] postorder) {
if( inorder.length!=postorder.length )
return null;
return createTree( inorder, 0, postorder, 0, inorder.length );
}
}
相关文章推荐
- LeetCode_Construct Binary Tree from Inorder and Postorder Traversal
- leetcode 110: Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode: Construct Binary Tree from Inorder and Postorder Traversal
- functionclass[LeetCode]Construct Binary Tree from Inorder and Postorder Traversal
- [面试真题] LeetCode:Construct Binary Tree from Inorder and Postorder Traversal
- [leetcode]Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode: Construct Binary Tree from Inorder and Postorder Traversal
- [leetcode] Construct Binary Tree from Inorder and Postorder Traversal
- [LeetCode] Construct Binary Tree from Inorder and Postorder Traversal
- [leetcode]Construct Binary Tree from Inorder and Postorder Traversal
- [leetcode刷题系列]Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode: Construct Binary Tree from Inorder and Postorder Traversal
- [Leetcode 79] 106 Construct Binary Tree from Inorder and Postorder Traversal
- [LeetCode] Construct Binary Tree from Inorder and Postorder Traversal
- [LeetCode]Construct Binary Tree from Inorder and Postorder Traversal
- leetcode--Construct Binary Tree from Inorder and Postorder Traversal
- [Leetcode] Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode-Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode 106: Construct Binary Tree from Inorder and Postorder Traversal