关闭

剑指offer第四题(重构二叉树)

标签: 二叉树递归
154人阅读 评论(0) 收藏 举报
分类:

题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

思路:用递归的思想。

java代码:

package com.yiibai.helloworld;
public class Solution {
    public class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode(int x) {
            val = x;
        }
    }
    public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
        TreeNode root=reConstructBTree(pre,0,pre.length-1,in,0,in.length-1);
        return root;
    }
    private TreeNode reConstructBTree(int [] pre,int startPre,int endPre,int [] in,int startIn,int endIn) {

        if(startPre>endPre||startIn>endIn)
            return null;
        TreeNode root=new TreeNode(pre[startPre]);
        for(int i=startIn;i<=endIn;i++)
            if(in[i]==pre[startPre]){
                root.left=reConstructBTree(pre,startPre+1,startPre+i-startIn,in,startIn,i-1);
                root.right=reConstructBTree(pre,i-startIn+startPre+1,endPre,in,i+1,endIn);
            }

        return root;
    }
}
python代码:

-*- coding:utf-8 -*-
class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None
class Solution:
    # 返回构造的TreeNode根节点
    def reConstructBinaryTree(self, pre, tin):
        # write code here
        if not pre or not tin:
            return
        root=TreeNode(pre[0])
        i=tin.index(root.val)
        root.left=self.reConstructBinaryTree(pre[1:i+1],tin[:i])
        root.right=self.reConstructBinaryTree(pre[i+1:],tin[i+1:])
        return root

0
0
查看评论

剑指Offer(第二版)面试题7:重建二叉树

根据前序遍历序列和中序遍历序列,如何重建二叉树
  • qq_25827845
  • qq_25827845
  • 2017-05-11 20:03
  • 834

leetcode第四题 Median of Two Sorted Arrays

转载地址:http://blog.csdn.net/yutianzuijin/article/details/11499917/ 这道题目c++的方式还没写。。 跟算法导论那第k大的数相同。写起来很多临界条件细细体味吧。 中心思想就是: 这2个数组nums1和nums2中各分成2部分...
  • u010235142
  • u010235142
  • 2015-12-01 20:23
  • 684

Leetcode第四题_Median of Two Sorted Arrays

Median of Two Sorted Arrays There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The ov...
  • bigevil
  • bigevil
  • 2015-05-11 20:19
  • 464

LeetCode 第四题

Longest Substring Without Repeating Characters  使用ASCII码作为Hash函数 借鉴KMP算法,加速滑动速度 LeetCode Time 4ms #include #include #define...
  • yang843061497
  • yang843061497
  • 2015-05-20 14:25
  • 821

Java笔记---剑指Offer(一:Java实现重建二叉树)

一、前言 最近正在准备找实习,因此拿起《剑指Offer》来看看,突击下自己的基础。但是《剑指Offer》上面的算法都是使用C语言,个人对C语言不熟悉,因此使用自己熟悉的Java来实现。嗯,以后要是机试啥的,能用Java我就用Java,C太恶心了⊙﹏⊙! 二、问题描述 /** * 题目:重建二叉树 ...
  • GuLu_GuLu_jp
  • GuLu_GuLu_jp
  • 2016-03-09 11:15
  • 1007

Leetcode: 第四题 Median of Two Sorted Arrays

题目 There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity shou...
  • qq_21071767
  • qq_21071767
  • 2015-09-16 21:09
  • 292

剑指offer编程题目汇总(更新中。。)

在牛客网上练题的题解,传送门:http://www.nowcoder.com/ta/coding-interviews?page=1二叉树的深度输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。C/C++/* struct Tre...
  • violet_echo_0908
  • violet_echo_0908
  • 2016-03-25 12:04
  • 1067

【剑指offer】重构二叉树

时间限制:1 秒 内存限制:32 兆 题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8...
  • mmc_maodun
  • mmc_maodun
  • 2014-05-05 16:03
  • 2916

简单的leetcode题(四)

Roman to Integer Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999. 把一个罗马数字转换成十进制,范围是1...
  • mjw110420117
  • mjw110420117
  • 2016-04-15 00:30
  • 600

剑指Offer面试题6(Java版):重建二叉树

题目:输入某二叉树的前序遍历和中序遍历的结果,请重新构造出该二叉树。假设输入的前序遍历和中序遍历的结果中不包含重复的数字。例如输入的前序遍历序列为{1,2,4,7,3,5,6,8}和中序遍历为{4,7,2,1,5,3,6,8},则重建出二叉树并输出它的头结点。 我们使用Java语言来实现上面的代码:...
  • jsqfengbao
  • jsqfengbao
  • 2015-07-27 18:36
  • 4992
    个人资料
    • 访问:5678次
    • 积分:1379
    • 等级:
    • 排名:千里之外
    • 原创:123篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条