`
hcx2013
  • 浏览: 88794 次
社区版块
存档分类
最新评论

重建二叉树

 
阅读更多

题目描述

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{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) {
    	if (pre==null || in==null || in.length<=0) {
    		return null;
    	}
    	return ConstructCore(pre, 0, in.length-1, in, 0, in.length-1);
    }
    public static TreeNode ConstructCore(int[] preOrder,
            int startPreIndex, int endPreIndex, int[] inOrder,
            int startInIndex, int endInIndex) {

        int rootValue = preOrder[startPreIndex];
        TreeNode root = new TreeNode(rootValue);

        if (startPreIndex == endPreIndex) {
            if (startInIndex == endInIndex
                    && preOrder[startPreIndex] == inOrder[startInIndex]) {
                return root;
            }
        }
        int rootInIndex = startInIndex;

        while (rootInIndex <= endInIndex && inOrder[rootInIndex] != rootValue) {
            ++rootInIndex;
        }

        int leftLength = rootInIndex - startInIndex;

        int leftPreOrderEndIndex = startPreIndex + leftLength;

        if (leftLength > 0) {
            root.left = ConstructCore(preOrder, startPreIndex + 1,
                    leftPreOrderEndIndex, inOrder, startInIndex,
                    rootInIndex - 1);
        }

        if (leftLength < endPreIndex - startPreIndex) {
            root.right = ConstructCore(preOrder, leftPreOrderEndIndex + 1,
                    endPreIndex, inOrder, rootInIndex + 1, endInIndex);
        }
        return root;
    }
}
 
分享到:
评论

相关推荐

    前序和中序重建二叉树并包含父节点

    前序和中序重建二叉树并包含父节点

    剑指offer面试题(7)——重建二叉树

    【重建二叉树】是计算机科学中一个经典的数据结构问题,主要出现在算法和数据结构的面试中,尤其在像《剑指Offer》这样的面试指南中经常出现。这道题目要求根据给定的前序遍历和中序遍历序列来重建原始的二叉树结构...

    python 四种方法解析重建二叉树,七种方法遍历二叉树

    python 四种方法解析重建二叉树,七种方法遍历二叉树 四种方法解析重建二叉树包括: 1、通过对象实例的左右儿子方法重建 2、通过键盘输入先序遍历重建 3、通过先序遍历的列表重建 4、通过层序遍历列表重建 七种方法...

    重建二叉树.md

    重建二叉树.md

    【剑指offer】面试题7-重建二叉树-完整的可执行代码(Java)

    题目描述: 输入某二叉树的前序遍历...例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 解题思路参考:https://blog.csdn.net/flower_48237/article/details/104045941

    java基础面试题重建二叉树

    java基础面试题重建二叉树提取方式是百度网盘分享地址

    重建二叉树1

    "重建二叉树1" 本资源摘要信息主要讲述如何重建二叉树,通过给定的前序遍历和中序遍历结果来重建该二叉树。该问题是 LeetCode上的经典问题,具有很高的实践价值。 一、什么是二叉树? 二叉树是一种特殊的树形数据...

    c++-剑指offer题解之重建二叉树

    c++ c++_剑指offer题解之重建二叉树

    python-剑指offer第4题重建二叉树

    python python_剑指offer第4题重建二叉树

    Python实现重建二叉树的三种方法详解

    尤其是在利用前序遍历来重建二叉树的过程中,Python的递归和栈的操作具有独特的优势。本文将详细介绍使用Python语言实现重建二叉树的三种常用方法,并结合实例进行分析。 首先,重建二叉树通常需要已知树的遍历结果...

    剑指Offer 04 – 重建二叉树详解(Python版)

    例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 什么是二叉树? 二叉树(Binary Tree)是n(n≥0)个节点的有限集合,它或者是空集(n=0),或者是由一个根节点以及...

    Rosevil1874#CS_Python_Notes#4重建二叉树1

    例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。* Definition for a

    【Python学习-二叉树-递归】【剑指offer】之重建二叉树

    本篇内容将讨论如何使用Python通过递归方法根据前序遍历和中序遍历的序列重建二叉树,这是基于《剑指Offer》中的一道题目。 二叉树的遍历主要有三种方式:前序遍历、中序遍历和后序遍历。前序遍历的顺序是根节点 -&gt;...

    C语言实现二叉树的重建源码

    在`main`函数中,程序首先读取用户输入的前序遍历和中序遍历序列,然后调用`ReBuild`函数重建二叉树,并通过前序遍历函数验证结果。此外,还提供了一个`GetTreeNode`函数用于计算树的高度。 #### 结论 通过以上...

    剑指Offer(Python多种思路实现):重建二叉树

    重建二叉树是指根据给定的两种遍历序列(如前序遍历和中序遍历)来恢复原始二叉树的数据结构。这个过程在面试中常常作为算法题出现,用来考察候选人的逻辑思维和编程能力。在这个问题中,我们有两个关键的遍历序列:...

    C++基于先序、中序遍历结果重建二叉树的方法

    C++基于先序、中序遍历结果重建二叉树的方法 本文主要介绍了C++基于先序、中序遍历结果重建二叉树的方法,结合实例形式分析了基于C++构建二叉树的相关操作技巧。 一、前序遍历和中序遍历 在二叉树的遍历算法中,...

    数据结构课程设计二叉树重建报告

    在本课程设计中,重点是通过先序和中序遍历序列来唯一地重建二叉树。 题目要求程序能够根据用户输入的先序和中序遍历序列来构建二叉树。先序遍历的顺序是根节点 -&gt; 左子树 -&gt; 右子树,而中序遍历的顺序是左子树 -&gt; ...

    Python利用前序和中序遍历结果重建二叉树的方法

    本文实例讲述了Python利用前序和中序遍历结果重建二叉树的方法。分享给大家供大家参考,具体如下: 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含...

Global site tag (gtag.js) - Google Analytics