重建二叉树-Java实现
重建二叉树
http://www.nowcoder.com/questionTerminal/8a19cbe657394eeaac2f6ea9b0f6fcf6
一. 思路
按照纸质考试去思考很容易知道怎么解。转成代码实现应该要了解如下递归解法的模板:
public TreeNode rebuild(...) {
if (!...) return null;
TreeNode root = new TreeNode(...);
node.left = rebuild(...);
node.right = rebuild(...);
return root;
}
public TreeNode reConstructBTree(...) {
return rebuild(...);
}二. 代码
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
return rebuild(pre, 0, pre.length-1, in, 0, in.length-1);
}
public TreeNode rebuild(int[] pre, int preLeft, int preRight,
int[] in, int inLeft, int inRight) {
if (preLeft > preRight) {
return null;
}
TreeNode root = new TreeNode(pre[preLeft]);
int rootIndex = inLeft;
while (rootIndex <= inRight && in[rootIndex] != pre[preLeft]){
rootIndex++;
}
root.left = rebuild(pre, preLeft+1, preLeft+rootIndex-inLeft,
in, inLeft, rootIndex-1);
root.right = rebuild(pre, preLeft+rootIndex-inLeft+1, preRight,
in, rootIndex+1, inRight);
return root;
}
}