面试题7:重建二叉树

<?php
header("content-type:text/html;charset=utf-8");
/*
 *重建二叉树 P62
 */
class TreeNode
{
    var $val;
    var $left = NULL;
    var $right = NULL;

    function __construct($val)
    {
        $this->val = $val;
    }
}
function reConstructBinaryTree($pre, $vin)
{
    if($pre == null || $vin == null){
        return false;
    }

    $rootValue = $pre[0];
    $root = new TreeNode($rootValue);

    $index = array_search($pre[0],$vin);
    $pre_left = array_slice($pre,1,$index);    //1是数组的截取的起始索引位置,index是截取的长度,而不是截取的结束索引位置!!!并且截取之后原数组pre的长度不变
    $vin_left = array_slice($vin,0,$index);
    $root->left = reConstructBinaryTree($pre_left,$vin_left);

    $pre_right = array_slice($pre,$index + 1);
    $vin_right = array_slice($vin,$index + 1);

    $root->right = reConstructBinaryTree($pre_right,$vin_right);

    return $root;

}

$pre = array(1,2,4,7,3,5,6,8);
$vin = array(4,7,2,1,5,3,8,6);

print_r(reConstructBinaryTree($pre,$vin));

原文地址:https://www.cnblogs.com/xlzfdddd/p/10054370.html

时间: 2024-12-19 14:31:32

面试题7:重建二叉树的相关文章

面试题:重建二叉树

题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回. 使用递归的方法 import java.util.*; public class Solution { public TreeNode reConstructBinaryTree(int [] pre,int [] in) { if(pre == nu

剑指offer 面试题7.重建二叉树

0.题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树.假设输入的前序遍历和中序遍历的结果都不包含重复的数字. 1.解法 1)由前序遍历的第一个节点可以得到该树的根节点R. 2)在中序遍历中找到该根节点R,R节点可将中序遍历的序列分成左子树和右子树. 3)将左子树和右子树作为新的子树并重复1) 原文地址:https://www.cnblogs.com/Justdocument/p/12394777.html

剑指-面试题-07.重建二叉树

输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3 / 9 20 / 15 7 限制: 0 <= 节点个数 <= 5000 解题思路 根据前序序列的第一个元素建立根结点: 在中序序列中找到该元素,确定根结点的左右子树的中序序列: 在前序序列中确定左右子树的前序序列: 由左子树的前序序

《剑指offer》第六题(重要!重建二叉树)

文件一:main.cpp // 面试题:重建二叉树 // 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输 // 入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1, // 2, 4, 7, 3, 5, 6, 8}和中序遍历序列{4, 7, 2, 1, 5, 3, 8, 6},则重建出 // 图2.6所示的二叉树并输出它的头结点. #include <iostream> #include "BinaryTree.h" using

剑指offer试题——重建二叉树

题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回. # -*- coding:utf-8 -*- #定义了类,树节点,二叉树的节点,这里节点由三部分组成,值,左侧指针,右侧指针 # class TreeNode: # def __init__(self, x): # self.val = x # sel

第3章 结构之法——重建二叉树

重建二叉树 问题描述 分析与解法 用java实现的代码如下: 1 package chapter3jiegouzhifa.RebuildBinTree; 2 3 /** 4 * 重建二叉树 5 * 递归解法 6 * @author DELL 7 * 8 */ 9 public class RebuildBinTree { 10 //定义节点类 11 public static class Node{ 12 int left; //左子树位置 13 int right; //右子树位置 14 ch

根据二叉树的前序遍历和中序遍历重建二叉树

题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回. 1 /** 2 * Definition for binary tree 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(

【编程之美】java实现重建二叉树

package com.cn.binarytree.utils; /** * @author 刘利娟 [email protected] * @version 创建时间:2014年7月20日 下午2:03:30 类说明: */ class Node { Node left; Node right; char chValue; Node(char chValue) { left = null; right = null; this.chValue = chValue; } } public cla

根据前序和中序重建二叉树

注意:1.仅根据前序和后序无法构建唯一的二叉树:2.二叉树前序遍历,第一个数字总是树的根节点的值:3.中序遍历中,根节点的值在序列的中间,左子树的值子在根节点的值的左边,右字树的值在根节点的值的右边:4.思路:递归 #include <iostream> #include <stdlib.h> using namespace std; struct Node{ int value; Node* left; Node* right; }; Node* ConstructCore(in