您的位置:首页 > 其它

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

2016-05-17 20:59 417 查看
好久没写题了,写起来就有点不适应,上大学时知道怎么根据前序遍历和中序遍历来恢复一棵树,但是从来没有实现过,今天碰到了,终于把曾经留下的遗憾弥补了

public class ConstructBinaryTreefromPreorderandInorderTraversa {

public class TreeNode {
int val;
TreeNode left;
TreeNode right;

TreeNode(int x) {
val = x;
}
}

public TreeNode buildTree(int[] preorder, int[] inorder) {
if(preorder.length == 0 || preorder.length != inorder.length){
return null;
}

return assistBuildTree(preorder, 0, preorder.length - 1, inorder, 0, inorder.length - 1);

}

public TreeNode assistBuildTree(int[] preorder,int pbegin,int pend,int[] inorder,int ibegin,int iend){
if(pbegin > pend){
return null;
}

int pivot = preorder[pbegin];
int i = ibegin;
//查找pivot在中序遍历中的位置
for(;i < iend;i ++){
if(inorder[i] == pivot){
break;
}
}

int leftLength = i - ibegin;

TreeNode root = new TreeNode(pivot);
//这里的开始下标和结束下标很重要
root.left = assistBuildTree(preorder, pbegin + 1, pbegin + leftLength, inorder, ibegin, i - 1);
root.right = assistBuildTree(preorder, pbegin + leftLength + 1, pend, inorder, i + 1, iend);

return root;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息