您的位置:首页 > 其它

LeetCode Construct Binary Tree from Preorder and Inorder Traversal

2015-07-06 15:38 471 查看
Description:

Given preorder and inorder traversal of a tree, construct the binary tree.

Solution:

基本思路是,前序的第一个是当前子树的根节点,那么在中序遍历的节点中遍历一遍,找到对应根节点的下标。

然后根据这个下标,减去这个子树开始节点的下标len,就知道了len个在根节点的左子树,其余在右子树。

这里有一个注意的点,就是len长度的节点,在前序和中序当中是一样的。

前序是(根节点)(len个左子树)(右子树)

中序是(len个左子树)(根节点)(右子树)

import java.util.*;

public class Solution {
int[] preorder;
int[] inorder;
int n;

public TreeNode buildTree(int[] preorder, int[] inorder) {
this.preorder = preorder;
this.inorder = inorder;
this.n = preorder.length;

return dfs(0, n - 1, 0, n - 1);
}

TreeNode dfs(int preStart, int preEnd, int inStart, int inEnd) {
if (preStart >= n || preEnd < 0 || inStart >= n || inEnd < 0
|| preStart > preEnd)
return null;
int len, inMiddle = inEnd;
for (int i = inStart; i <= inEnd; i++) {
if (inorder[i] == preorder[preStart]) {
inMiddle = i;
break;
}
}
len = inMiddle - inStart;

TreeNode root = new TreeNode(preorder[preStart]);

System.out.println(root);

root.left = dfs(preStart + 1, preStart + len, inStart, inMiddle - 1);
root.right = dfs(preStart + 1 + len, preEnd, inMiddle + 1, inEnd);

return root;
}

public static void main(String[] args) {
Solution s = new Solution();
s.buildTree(new int[] { 1, 2 }, new int[] { 1, 2 });
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: