//题目描述
//输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
//例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
//解题思路:前序遍历的首位是二叉树根节点 通过中序遍历找到该节点所在位置 则其前面的为左子树 后面的为右子树 各个子树有是同样的原理 递归思想
/*class TreeNode{
var $val;
var $left = NULL;
var $right = NULL;
function __construct($val){
$this->val = $val;
}
}*/
function reConstructBinaryTree($pre, $vin)
{
$root =new TreeNode($pre[0]);//将根节点存入root节点对象
$gen = array_search($pre[0], $vin);//根节点在中序遍历中的位置
if($pre && $vin){
$root->left = reConstructBinaryTree( array_slice($pre,1,$gen),array_slice($vin,0,$gen));
$root->right = reConstructBinaryTree( array_slice($pre,$gen+1),array_slice($vin,$gen+1));
return $root;
}
}