题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
/**
* 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) {
TreeNode rootNode = new TreeNode(pre[0]);
if (pre.length <= 1)
{
rootNode.left = null;
rootNode.right = null;
return rootNode;
}
int NoRootIn = 0;
for (int i = 0; i < in.length; i++)
{
if (in[i] == rootNode.val)
{
NoRootIn = i;
}
}
if (NoRootIn > 0)
{
int [] preLeft = new int[NoRootIn];
int [] inLeft = new int[NoRootIn];
for (int i = 0; i < NoRootIn; i++)
{
preLeft[i] = pre[i+1];
inLeft[i] = in[i];
}
rootNode.left = reConstructBinaryTree(preLeft,inLeft);
}
else
{
rootNode.left = null;
}
if (pre.length - NoRootIn > 1)
{
int [] preRight = new int[pre.length - NoRootIn -1];
int [] inRight = new int[pre.length - NoRootIn -1];
for (int i = NoRootIn + 1; i < pre.length; i++)
{
preRight[i - NoRootIn - 1] = pre[i];
inRight[i - NoRootIn - 1] = in[i];
}
rootNode.right = reConstructBinaryTree(preRight,inRight);
}
else
{
rootNode.right = null;
}
return rootNode;
}
}