`
wx1569484809
  • 浏览: 63822 次
文章分类
社区版块
存档分类
最新评论

从前序遍历数组创建二叉树 c实现

 
阅读更多

网上很多实现创建二叉树的方法,很大程度受《大话数据结构》影响,不断通过输入节点来创建。个人觉得这样很不方便,修改起来也很麻烦。不过按照《大话数据结构》创建二叉树的思路,可以从前序遍历的数组创建二叉树,首先,规定该数组的格式:

格式还是按照《大话数据结构》里面,最后的空节点用一个特殊的值来替代,并且也遍历进数组

171450_T6cT_3464640.png

其中ABCD就是自己的数,#可以用以数来表示。这里我用0x7fffffff来表示。具体的数值,应该根据自己项目情况,选取不会出现的数值来替代。

#include <stdio.h>
#include <stdlib.h>

#define MAXNUM 0x7fffffff

struct BiTreeNode {                                                //定义树节点
    int dat;
    struct BiTreeNode *lchild;                                    //左子树指针
    struct BiTreeNode *rchild;                                    //右子树指针
};

/*
将二叉树的前序遍历存入数组,末尾空位置放置0x7fffffff
*/
void creatBiTree(struct BiTreeNode** head, int a[], int length, int index) {
    static int count;
    count = index;

    if (count >= length) {
        return;
    }
    if (length <= 0 || a[count] == MAXNUM) {
        *head = NULL;
        return;
    }

    (*head) = (struct BiTreeNode *)malloc(sizeof(struct BiTreeNode));
    (*head)->dat = a[count];
    creatBiTree(&((*head)->lchild), a, length, count + 1);
    creatBiTree(&((*head)->rchild), a, length, count + 1);
}

void preOrdV(struct BiTreeNode *head) {                                //二叉树的前序遍历
    if (head == NULL) {
        return;
    }
    printf("%d ", head->dat);
    preOrdV(head->lchild);
    preOrdV(head->rchild);
}

void inOrdV(struct BiTreeNode *head) {                            //二叉树中序遍历
    if (head == NULL) {
        return;
    }
    inOrdV(head->lchild);
    printf("%d ", head->dat);
    inOrdV(head->rchild);
}

void postOrdV(struct BiTreeNode *head) {                        //后续遍历二叉树
    if (head == NULL) {
        return;
    }
    postOrdV(head->lchild);
    postOrdV(head->rchild);
    printf("%d ", head->dat);
}


int main() {
    struct BiTreeNode* head = NULL;
    int TreeNum[] = { 1, 2, 4, MAXNUM , 7, MAXNUM, MAXNUM, MAXNUM, 3, 5, MAXNUM, MAXNUM, 6, 8, MAXNUM, MAXNUM, MAXNUM };
    creatBiTree(&head, TreeNum, sizeof(TreeNum) / sizeof(int), 0);
    preOrdV(head);
    printf("\n");
    inOrdV(head);
    printf("\n");

    return 0;
}

我们来验证一下:

172227_fpiH_3464640.png

 

转载于:https://my.oschina.net/u/3464640/blog/983667

分享到:
评论

相关推荐

    利用三元组建立二叉树

    用三元组的形式表示二叉树的结构,建立二叉树,并利用栈的方式和递归方式实现中序遍历。

    二叉树建立及遍历算法实现

    建立二叉树,实现二叉树的先序、中序、后序的递归遍历算法,输出遍历结果。 实现二叉树的先序、中序、后序和层次遍历的非递归算法,输出遍历结果。

    二叉树建立 二叉树基本算法的实现

    (1)输入字符序列,建立二叉链表。 (2)先序、中序、后序遍历二叉树:递归算法。 (3)中序遍历二叉树:非递归算法(最好也能实现先序,后序非递归算法)。 (4)求二叉树的高度 。 (5)求二叉树的叶子个数。 ...

    遍历二叉树C实现代码

    在给定的“遍历二叉树C实现代码”中,包含了四种常见的二叉树遍历方法,即前序遍历、中序遍历、后序遍历和层次遍历。接下来我们将详细讨论这四种方法。 1. **前序遍历**:前序遍历的顺序是先访问根节点,然后遍历左...

    平衡二叉树C实现源码(带详细注释)

    Status InsertBST(BSTree &T,ElemType e); //实现树的节点的插入 Status PreOrderTraverse(BSTree T); //实现树的递归前序遍历 Status InOrderTraverse(BSTree T); //实现树的递归中序遍历 ... //实现队列的建立

    线索化二叉树C实现代码

    这种数据结构通过利用二叉树结点中的空指针域,即通常的`left`和`right`指针,来附加线索,帮助在遍历时跟踪前驱和后继节点。本文将详细介绍两种线索化二叉树的方法,并给出C语言的实现代码。 **线索化二叉树的概念...

    线索化二叉树的实现

    "线索化二叉树的实现" 在计算机科学中,二叉树是一种重要的数据结构,它广泛应用于各种领域,如数据库、文件系统、编译器等。线索化二叉树是一种特殊的二叉树,它在二叉树的每个节点中添加了指向其前驱和后继节点的...

    C++线索二叉树类实现

    在C++中实现线索二叉树需要理解二叉树的基本概念以及链式存储结构。本文将深入探讨线索二叉树的原理和C++实现。 首先,我们要明确二叉树的基本概念。二叉树是由n(n&gt;=0)个有限节点组成的数据结构,这些节点通过边...

    数据结构中 二叉树功能的实现 C #语言源码

    本篇将详细探讨使用C#语言实现二叉树的功能,包括创建、显示、遍历以及调整显示大小。 首先,二叉树是由节点构成的层次结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。在C#中,我们可以通过定义一个...

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

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

    广义表创建二叉树及二叉树输出广义表

    本话题主要探讨如何从广义表创建二叉树以及如何将二叉树输出为广义表,我们将重点放在C++实现上。 首先,我们来看如何用广义表创建二叉树。广义表通常由一对括号表示,括号内可以是元素或另一个广义表。对于给定的...

    C语言实现二叉树的创建遍历

    ### C语言实现二叉树的创建与遍历 在计算机科学中,二叉树是一种重要的数据结构,它具有丰富的应用场景,比如文件系统、编译器的设计等。本篇文章将详细介绍如何使用C语言来实现二叉树的基本操作:创建与遍历。 ##...

    根据先序与中序遍历结果建立二叉树

    ### 根据先序与中序遍历结果建立二叉树 #### 一、问题背景与定义 在数据结构的学习中,二叉树是一种非常重要的非线性数据结构,广泛应用于计算机科学的多个领域,如搜索算法、编译器设计等。其中,二叉树的遍历是...

    二叉树的简单实现

    二叉树的简单实现代码

    105_从前序遍历与中序遍历序列构造二叉树.c

    105_从前序遍历与中序遍历序列构造二叉树.c

    先序创建二叉树并打印

    先序创建二叉树并打印 先序创建二叉树并打印 先序创建二叉树并打印

    平衡二叉树的建立c语言实现

    平衡二叉树是一种特殊的二叉树...在实现过程中,通常会编写一系列函数,如创建树、插入节点、删除节点、查找节点、旋转节点以及打印树等功能。通过这些操作,我们可以理解平衡二叉树的工作原理和其在实际问题中的优势。

    二叉树的具体实现例子

    在Java中,二叉树的实现通常涉及到对象的创建和引用,以及对基本操作如插入、删除和搜索的处理。下面将详细介绍二叉树的概念、常见类型以及在Java中的具体实现。 二叉树定义: 二叉树是由n(n&gt;=0)个有限节点组成的...

    二叉树的创建及其遍历

     按先序遍历的扩展序列建立二叉树的二叉链表存储结构,实现二叉树先序、中序、后序遍历的递归算法,实现二叉树中序遍历的非递归算法,实现二叉树层次遍历的非递归算法(要求使用顺序队列,调用顺序队列基本操作...

Global site tag (gtag.js) - Google Analytics