`
wihoho
  • 浏览: 8946 次
  • 性别: Icon_minigender_1
  • 来自: Singapore
最近访客 更多访客>>
社区版块
存档分类
最新评论

由preOrder和inOrder构建二叉树

阅读更多

Let us consider the below traversals:


Inorder sequence: D B E A F C
Preorder sequence: A B D E C F


In a Preorder sequence, leftmost element is the root of the tree. So we know ‘A’ is root for given sequences. By searching ‘A’ in Inorder sequence, we can find out all elements on left side of ‘A’ are in left subtree and elements on right are in right subtree. So we know below structure now.

                 A
               /   \
             /       \
           D B E     F C

We recursively follow above steps and get the following tree.

         A
       /   \
     /       \
    B         C
   / \        /
 /     \    /
D       E  F

Algorithm: buildTree()

  • 1) Pick an element from Preorder. Increment a Preorder Index Variable (preIndex in below code) to pick next element in next recursive call.
  • 2) Create a new tree node tNode with the data as picked element.
  • 3) Find the picked element’s index in Inorder. Let the index be inIndex.
  • 4) Call buildTree for elements before inIndex and make the built tree as left subtree of tNode.
  • 5) Call buildTree for elements after inIndex and make the built tree as right subtree of tNode.
  • 6) return tNode.

 

TreeNode buildTree(char in[], char pre[], int inStr, int inEnd){
        int preIndex = 0;
        if(inStr > inEnd) return null;
         
        TreeNode tNode = new TreeNode(pre[preIndex++]);
        if(inStr == inEnd) return tNode;
         
        int inIndex = search(in, inStr, inEnd, tNode.item);
        tNode.left = buildTree(in, pre, inStr, inIndex - 1);
        tNode.right = buildTree(in, pre, inIndex + 1, inEnd);
        return tNode;
     }
      
int search(char arr[], int strt, int end, char value){
         int i;
         for(i = strt; i <= end; i++){
             if(arr[i] == value)
                 break;
         }
         return i;
     }
 

 

0
5
分享到:
评论

相关推荐

    Construct Binary Tree from Preorder and Inorder Traversal

    Construct Binary Tree from Preorder and Inorder Traversal 根据先序,中序建立二叉树

    105.construct binary tree from preorder and inorder traversal从前序和与中序遍历序列构造二叉树【LeetCode单题讲解系列】

    105.construct_binary_tree_from_preorder_and_inorder_traversal从前序

    建立二叉树,前后中序遍历二叉树,求二叉树的深度

    在计算机科学领域,二叉树是一种基础的数据结构,它由节点构成,每个节点最多有两个子节点,通常称为左子节点和右子节点。这个主题涵盖了如何建立二叉树,以及如何进行前序、中序和后序遍历,还有如何计算二叉树的...

    递归建立二叉树与前序中序后续遍历

    在计算机科学中,二叉树是一种重要的数据结构,它由节点构成,每个节点最多有两个子节点,通常称为左子节点和右子节点。递归是解决问题的一种强大技术,尤其在处理树形结构时非常有效。本主题将深入探讨如何使用递...

    数据结构建立二叉树(二叉建立树)

    这段代码通过读取用户输入的字符来构建二叉树。如果输入的是一个字符,则创建一个新的节点并递归地创建其左右子树;如果输入的是字符'.',则表示该位置为空节点。 ### 二、二叉树的遍历 #### 1. 前序遍历 前序遍历...

    数据结构二叉树实验报告(附代码).pdf

    我们还采用递归的思想构造了 Preorder、Inorder 和 Postorder 函数,分别实现了二叉树的先序、中序和后序遍历。最后,我们编写了 Sumleaf 和 Depth 函数,来求叶子节点的数目和二叉树的深度。 二、实验设计 在实验...

    二叉树的建立及遍历

    - 输入前序和中序遍历序列,例如用数组 `preorder[]` 和 `inorder[]` 存储。 - 创建一个二叉树节点的结构体 `struct node`,包含数据域 `data` 和两个指针域 `leftchild` 和 `rightchild`。 - 编写函数 `...

    二叉树的遍历,包括建立二叉树,打印树状,递归和非递归的遍历,求二叉树的节点数,深度等

    代码中提供了递归版本的前序遍历(`PreOrder`)、中序遍历(`InOrder`)和后序遍历(`PostOrder`),以及非递归版本的前序遍历(`preOrder`)、中序遍历(`inOrder`)和后序遍历(`postOrder`)。递归版本的遍历相对...

    JAVA实现二叉树建立、遍历

    首先,我们来看如何通过先序和中序序列建立二叉树。先序遍历顺序是:根节点 -&gt; 左子树 -&gt; 右子树;中序遍历顺序是:左子树 -&gt; 根节点 -&gt; 右子树。根据这两个序列,我们可以构建出唯一的一棵二叉树。具体算法如下: ...

    数据结构二叉树功能展示

    cout&lt;&lt;" create in preorder and inorder ... 以前序和中序序列创建二叉树"; cout&lt;&lt;" traversal in preorder ... 前序遍历二叉树"; cout&lt;&lt;" traversal in inorder ... 中序遍历二叉树"; cout&lt;&lt;" traversal ...

    前序序列建立二叉树

    ### 前序序列建立二叉树 #### 知识点概述 在计算机科学的数据结构领域,二叉树是一种常用且重要的数据结构。通过给定的前序序列,可以构建出唯一的二叉树结构。本篇文章将详细介绍如何利用C++语言实现基于前序序列...

    数据结构 建立二叉树二叉链表存储结构实现有关操作 实验报告

    ### 数据结构:建立二叉树二叉链表存储结构实现有关操作 #### 一、实验题目及背景 本次实验的主要任务是通过建立二叉树的二叉链表存储结构来实现特定的操作。二叉树是一种重要的非线性数据结构,在计算机科学中有...

    二叉树的建立与遍历

    二叉树的遍历有三种基本方法:前序遍历(Preorder Traversal)、中序遍历(Inorder Traversal)和后序遍历(Postorder Traversal)。 1. **前序遍历**:先访问根节点,然后遍历左子树,最后遍历右子树。递归实现...

    算法实验_二叉树建立和输出

    在这个"算法实验_二叉树建立和输出"中,我们将深入探讨如何利用先序和中序遍历来构建二叉树以及如何在控制台上显示它的结构。 首先,`tree.h`文件很可能是定义二叉树节点的头文件。在C++中,二叉树节点通常会包含一...

    数据结构实验报告-二叉树20.doc

    在本次实验中,我们设计了三个函数Preorder、Inorder和Postorder来遍历二叉树。Preorder函数实现先序遍历,Inorder函数实现中序遍历,Postorder函数实现后序遍历。三个函数都使用递归的方法来遍历二叉树。 (三)...

    先序加中序序列建立二叉树

    中序遍历(Inorder Traversal)的顺序是:左子树 -&gt; 根节点 -&gt; 右子树。中序遍历的特点是在遍历左子树之后访问根节点,然后再遍历右子树。 要根据先序和中序序列重建二叉树,可以遵循以下步骤: 1. **解析先序遍历...

    建立二叉树先中后序查找

    二叉树由节点构成,每个节点包含一个数据部分(`data`)以及指向其左子树和右子树的指针(`lchild`和`rchild`)。在给定的代码中,二叉树的定义如下: ```c typedef char datatype; typedef struct node { ...

    构建二叉树_二叉树_

    2. **中序遍历**(Inorder Traversal): - 中序遍历的顺序是:左子树 -&gt; 根节点 -&gt; 右子树。 - 在中序序列中,根节点的位置将序列分为两部分:左侧为左子树的中序序列,右侧为右子树的中序序列。找到根节点后,...

    二叉树的操作

    二叉树是一种重要的数据结构,它由有限个节点组成,每个节点最多有两个子节点,分别称为左子节点和右子节点。本实验旨在深入理解二叉树的存储、遍历和算法实现。以下是对相关知识点的详细说明: 1. **二叉树的存储...

    二叉树基本操作的程序实现

    在本程序中,我们定义了两个中序遍历函数:`Inorder1`和`Inorder2`。`Inorder1`函数使用递归的方法实现中序遍历,而`Inorder2`函数使用栈来实现非递归的中序遍历。 4. 后序遍历 后序遍历是指从左子树开始,访问左...

Global site tag (gtag.js) - Google Analytics