C语言描述-二叉树链式存储

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

typedef char TElemType;

typedef struct BiTNode
{
    TElemType data;    //数据
    struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;

/*构建二叉树*/
void CreateBiTree(BiTree *T)
{
    TElemType e;

    if ((e=getchar()) == '#')
    {
        *T = NULL;
    }
    else
    {
        *T = (BiTree) malloc(sizeof(BiTNode));
        if (!T)
        {
            exit(0);
        }
        (*T)->data = e;
        CreateBiTree(&(*T)->lchild);    //创建左子树
        CreateBiTree(&(*T)->rchild);    //创建右子树
    }
}

/*先序遍历*/
void PreOrderTraverse(BiTree T)
{
    if (T)
    {
        printf("%c ",T->data);
        PreOrderTraverse(T->lchild);
        PreOrderTraverse(T->rchild);
    }

}

/*中序遍历*/
void InOrderTraverse(BiTree T)
{
    if (T)
    {
        InOrderTraverse(T->lchild);
        printf("%c ",T->data);
        InOrderTraverse(T->rchild);
    }
}

/*后续遍历*/
void PostOrderTraverse(BiTree T)
{
    if (T)
    {
        PostOrderTraverse(T->lchild);
        PostOrderTraverse(T->rchild);
        printf("%c ",T->data);
    }
}

int main()
{
    BiTree T;
    printf("请输入元素,#表示空树:\n");
    CreateBiTree(&T);
    printf("先序遍历:");
    PreOrderTraverse(T);
    printf("\n中序遍历:");
    InOrderTraverse(T);
    printf("\n后序遍历:");
    PostOrderTraverse(T);
    printf("\n");

    return 0;
}
/* 测试
请输入元素,#表示空树:
AB##CD##EF##G##
先序遍历:A B C D E F G
中序遍历:B A D C F E G
后序遍历:B D F G E C A
Program ended with exit code: 0
*/

原文地址:https://www.cnblogs.com/zhulmz/p/11745381.html

时间: 2024-10-10 00:39:41

C语言描述-二叉树链式存储的相关文章

二叉树链式存储结构

二叉链表的C语言描述 基本运算的算法--建立二叉链表.先序遍历二叉树.中序遍历二叉树.后序遍历二叉树.后序遍历求二叉树深度 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65

10 二叉树-链式存储-递归遍历

终于进入非线性数据结构的第一站了! 先从简单的开始回忆起来吧! 1.二叉树的链式存储 用一个链表来存储一颗二叉树,每一个结点用链表的一个链结点来存储. 通常地,一个二叉链表至少包含3个域:数据域data.左指针域lchild.右指针域rchild. 现实应用的过程中,可以按照自己的需求添加其他指针域. 1 typedef struct BitNode{ 2 int data; 3 struct BitNode *lchild,*rchild; 4 }BitNode,*BiTree; 2.遍历 二

二叉树链式存储和遍历

1 二叉树的链式存储 1.1 链式存储 顺序存储对空间利用率较低,所以,二叉树一般采用链式存储结构,用一个链表来存储一颗二叉树.二叉链表至少包含3个域:数据域data,左指针域lchild和右指针域rchild,如果再加上一个指向双亲结点的指针就变成了三叉链表. 二叉树的链式存储结构如下: /** * 二叉链表结点 * @author cyhe */ private class Node{ Integer data; Node lchild, rchild; } 根据完全二叉树的序列递归创建二叉

数据结构基础(4)C语言实现栈--链式存储(动态栈)

写程序的时候,我们经常会说基本类型变量存在栈内存,引用类型的变量(对象,数组)存在堆内存.现在我们来看看栈这种数据结构是怎么实现的. 定义 一种可以实现"先进后出" 的存储结构 栈类似于往箱子放衣服,先放的最后拿 栈的分类: 静态栈:以数组方式实现,删除时删除下标最大的,插入时从最大下标+1插入 动态栈:以链表方式实现,删除和插入都是从头部 算法:出栈(POP),入栈(PUSH) 应用: 1.      函数调用 :在函数f中调用另一个g函数,在g函数中调用k函数 执行到要调用g函数位

二叉树链式存储中的四种遍历方法

void InorderTraversal( BinTree BT ) { if( BT ) { InorderTraversal( BT->Left ); /* 此处假设对BT结点的访问就是打印数据 */ printf("%d ", BT->Data); /* 假设数据为整型 */ InorderTraversal( BT->Right ); } } void PreorderTraversal( BinTree BT ) { if( BT ) { printf(&

java实现二叉树的链式存储

package com.fxr.二叉树链式存储; import java.util.Scanner; public class Tree { static final int MAXLEN = 20; static Scanner input = new Scanner(System.in); CBTType InitTree() { CBTType node; if((node = new CBTType()) != null) { System.out.println("请输入一个根节点的数

数据结构:二叉树的链式存储

数据结构:二叉树的链式存储(C语言版) 1.写在前面 二叉树同样有两种存储方式,数组和链式存储,对于数组来说,我们利用二叉树的性质然后利用下标可以方便的找到一个节点的子节点和父节点. 二叉树的性质: 1.二叉树的第i层上至多有2i-1个节点 2.深度为K的二叉树至多有2k-1个节点 3.任何一个二叉树中度数为2的节点的个数必度数为0的节点数目少1. 说明:度数为0,为叶子节点. 4.具有n个节点的完全二叉树的深度为|_Log2N_|+1 5.若完全二叉树中的某节点编号为i,则若有左孩子编号为2i

二叉树的链式存储结构----二叉链表

头文件:head.h #include<string.h> #include<ctype.h> #include<malloc.h> /* malloc()等 */ #include<limits.h> /* INT_MAX等 */ #include<stdio.h> /* EOF(=^Z或F6),NULL */ #include<stdlib.h> /* atoi() */ #include<io.h> /* eof()

二叉树的创建与遍历(链式存储)

这里采用的是链式存储,每个结点包含三个属性(指向左右孩子的指针和本结点的数据),如果想了解顺序存储二叉树,可以参考http://www.cnblogs.com/-beyond/p/6065189.html 采用先序递归创建二叉树,叶子的左右孩子链域为NULL 输入的顺序为:abd--e--c-f--   (-表示空一个空格) #include<iostream> #include<cstdio> using namespace std; struct BiTNode{ BiTNod