博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
树的链式存储结构
阅读量:6999 次
发布时间:2019-06-27

本文共 3276 字,大约阅读时间需要 10 分钟。

今天周末,无聊了,咱们观察下树怎么从枝杈长成参天大树吧!

首先,得把树杈栽入土中,我们先看一下土壤吧!

#include "stdio.h"#include "stdlib.h"#include "string"#include "math.h"#include "io.h"#include "time.h"#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 100typedef int Status;typedef char TElemType;TElemType Ni1 = ' ';

土壤咱们选择完了,于是咱们就幻想树长大了,有各种各样的树叶,那一片一片的树叶脉络,真棒!

int index = 1;typedef char String[24];String str;Status StrAssign(String T, char* chars){    int i;    if (strlen(chars) > MAXSIZE)        return ERROR;    else    {        T[0] = strlen(chars);        for (i = 1; i <=T[0]; i++)            T[i] = *(chars + i - 1);        return OK;    }}

还有那各种各样的树杈,也很不错!

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

但,咱们现在没有树杈,手里空空

Status InitBiTree(BiTree *T){     *T=NULL;    return OK;}

于是,咱们去买赶紧栽种吧!终于种完了,于是每天给他浇水,期待着它慢慢的长大,终于他长大了,长了各种各样的树枝

void CreateBiTree(BiTree *T){     TElemType ch;        /* scanf("%c",&ch); */    ch=str[index++];    if(ch=='#')         *T=NULL;    else    {        *T=(BiTree)malloc(sizeof(BiTNode));        if(!*T)            exit(OVERFLOW);        (*T)->data=ch; /* 生成根结点 */        CreateBiTree(&(*T)->lchild); /* 构造左子树 */        CreateBiTree(&(*T)->rchild); /* 构造右子树 */    } }

树长大了,但是它结了几层的树杈啊,咱们还是数一数吧!

int BiTreeDepth(BiTree T){    int i, j;    if (!T) return 0;        if (T->lchild)        i = BiTreeDepth(T->lchild);    else i = 0;    if (T->rchild)        j = BiTreeDepth(T->rchild);    else j = 0;    return 1 + i > j ? i : j;}

树长得太大了,树根都冒出花盆外了,明显可以看到树根了

TElemType Root(BiTree T){    if (T)        return T->data;    else return Ni1;}

我的天,这片树叶真好看啊,不信你看一看

TElemType Value(BiTree p){    return p->data;}

妹妹,你往树叶上瞎涂什么啊!你看看被你涂成什么样子了?

void Assign(BiTree p, TElemType value){    p->data = value;}

妹妹突然被我这么一吼,吓坏了,于是就哭了,哎,早知这样,我就不吼了,还得哄!

“妹妹啊!别哭哈!咱们一起数叶子吧,咱们先从上往下面数吧”(前序)

void PreOrderTraverse(BiTree T){    if (T==NULL) return;    printf("%c", T->data);    PreOrderTraverse(T->lchild);    PreOrderTraverse(T->rchild);}

“咱们从上往下数完,咱们就从左往右数吧!”(中序)

void InOrderTraverse(BiTree T){    if (T == NULL) return;    InOrderTraverse(T->lchild);    printf("%c", T->data);    InOrderTraverse(T->rchild);}

“这回,咱们从下往上数吧”(后序)

void PostOrderTraverse(BiTree T){    if (T == NULL) return;    PostOrderTraverse(T->lchild);    PostOrderTraverse(T->rchild);    printf("%c", T->data);}

随着一天一天过去,到了秋天,树叶黄了,于是变成了落叶

void DestroyBiTree(BiTree *T){    if (*T)    {        if ((*T)->lchild)            DestroyBiTree(&(*T)->lchild);        if ((*T)->rchild)            DestroyBiTree(&(*T)->rchild);        free(*T);        *T = NULL;    }}#define ClearBiTree DestroyBiTree

树的成长我已经拍下来了,你们可以自己看一下吧!

int main(){    int i;    BiTree T;    TElemType e1;    InitBiTree(&T);    StrAssign(str, "ABDH#K###E##CFI###G#J##");    CreateBiTree(&T);    printf("构造空二叉树后,树空否?%d(1:是 0:否) 树的深度=%d\n", BiTreeEmpty(T), BiTreeDepth(T));    e1 = Root(T);    printf("二叉树的根为: %c\n", e1);    printf("\n前序遍历二叉树:");    PreOrderTraverse(T);    printf("\n中序遍历二叉树:");    InOrderTraverse(T);    printf("\n后序遍历二叉树:");    PostOrderTraverse(T);    ClearBiTree(&T);    printf("\n清除二叉树后,树空否?%d(1:是 0:否) 树的深度=%d\n", BiTreeEmpty(T), BiTreeDepth(T));    i = Root(T);    if (!i)        printf("树空,无根\n");    getchar();    return 0;}

 

转载于:https://www.cnblogs.com/zhuifeng-mayi/p/10813934.html

你可能感兴趣的文章
Delphi xe7 up1 调用android振动功能
查看>>
激励自己的话
查看>>
IOS 实现界面本地化(国际化)
查看>>
陶哲轩实分析命题 11.10.7
查看>>
《陶哲轩实分析》引理17.2.4证明_导数的唯一性
查看>>
站立会议5
查看>>
python中的常用模块(2)
查看>>
登陆的键盘敲击事件
查看>>
执行计划基础 统计信息
查看>>
python MD5加密方法
查看>>
mysql连接jdbc查询代码
查看>>
SpringMVC10数据验证
查看>>
处理异常Error resolving template [/login], template might not exist or might not be accessible by......
查看>>
洛谷 P1147 连续自然数和 Label:等差数列
查看>>
线程间的同步和通信机制
查看>>
Python脚本实现值更新事件赋值过程记录日志监控
查看>>
[bzoj 1503][NOI 2004]郁闷的出纳员
查看>>
Java课程上机实验1_ConnectionManager
查看>>
node.js中通过dgram数据报模块创建UDP服务器和客户端
查看>>
FZU Tic-Tac-Toe -.- FZU邀请赛 FZU 2283
查看>>