您的位置:首页 > 其它

【LeetCode】-Construct Binary Tree from Preorder and Inorder Traversal

2014-09-23 23:08 483 查看
Given preorder and inorder traversal of a tree, construct the binary tree.

Note:

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

/**
* 根据先序数组和中序数组,建立二叉树
* 解题思路:
* 1.取先序数组的第一个元素作为根元素;
* 2.找到根元素在中序数组中的位置index,小于index为左子树,大于index为右子树;
* 3.分别对左右子树重复1.2操作。
*
* 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[] pre_arr,
int pre_start,
int[] in_arr,
int in_start,
int length
){
if( length<=0 ){
return null;
}
//取先序数组的第一个元素,作为跟节点
TreeNode root = new TreeNode(pre_arr[pre_start]);
//计算根节点元素在先序数组中的下标
int index = getIndex( in_arr, pre_arr[pre_start], in_start, in_start+length-1 );
int len = index - in_start;
//对左右子树递归求解
root.left = createTree( pre_arr, pre_start+1, in_arr, in_start, len);
root.right = createTree( pre_arr, pre_start+len+1, in_arr, index+1, length-len-1);
return root;
}

public TreeNode buildTree(int[] preorder, int[] inorder) {
if( preorder.length!=inorder.length )
return null;
return createTree( preorder, 0, inorder, 0, inorder.length );
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐