当前位置:网站首页>(10)二叉树
(10)二叉树
2022-06-23 17:48:00 【Day-3】
理论内容转自:https://blog.csdn.net/weixin_51983604/article/details/116451530
树
树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根在上,而叶在下的。
有一个特殊的结点,称为根结点,根节点没有前驱结点。除根节点外,其余结点被分成m(m > 0)个互不相交的集合T1、T2、…… 、Tm,其中每一个集合Ti(1 <= i <= m)又是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱,但可以有0个或多个后继。
由此可知,树是递归定义的。
二叉树概念及结构
一棵二叉树是结点的一个有限集合,该集合为空,或者是由一个根节点加上两棵称为左子树和右子树的二叉树组成。
二叉树的特点:
(1)每个结点最多有两棵子树,即二叉树不存在度大于2的结点。
(2)二叉树的子树有左右之分,其子树的次序不能颠倒。
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
char str[100];
int treeIndex = 1;
char Nil = ' ';
typedef struct BiTNode
{
char data;
struct BiTNode * lchild;
struct BiTNode * rchild;
}BiTNode, *BiTree;
bool StrAssign(char * T, char * chars)
{
if (strlen(chars)>100)
{
return false;
}
else
{
T[0] = strlen(chars);
//这里应该是<=,不是<
for (size_t i = 1; i <= T[0]; i++)
{
T[i] = *(chars + i - 1);
}
return true;
}
}
bool InitBiTree(BiTree *T)
{
*T = NULL;
return true;
}
void DestroyBiTree(BiTree * T)
{
if (*T)
{
if ((*T)->lchild)
{
//这里(*T)->lchild修改成&(*T)->lchild
DestroyBiTree(&(*T)->lchild);
}
if ((*T)->rchild)
{
//这里(*T)->lchild修改成&(*T)->lchild
DestroyBiTree(&(*T)->rchild);
}
free(*T);
*T = NULL;
}
}
void CreateBiTree(BiTree * T)
{
char ch;
ch = str[treeIndex++];
if (ch == '#')
{
*T = NULL;
}
else
{
*T = (BiTree)malloc(sizeof(BiTNode));
if (!*T)
{
return;
}
(*T)->data = ch;
//这里(*T)->lchild修改成&(*T)->lchild
CreateBiTree(&(*T)->lchild);
CreateBiTree(&(*T)->rchild);
}
}
bool BiTreeEmpty(BiTree T)
{
if (T)
{
return false;
}
else
{
return true;
}
}
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 i > j ? i + i : j + 1;
}
char Root(BiTree T)
{
if (BiTreeEmpty(T))
{
return Nil;
}
else
{
return T->data;
}
}
char value(BiTree T)
{
return T->data;
}
void Assign(BiTree T, char value)
{
T->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);
}
int main()
{
/*int i;*/
BiTree T;
char cl;
InitBiTree(&T);
StrAssign(str, "ABDH#K###E##CFI###G#J##");
CreateBiTree(&T);
printf("Empty = %d(1 = yes 0 = no) 树的深度 = %d\n", BiTreeEmpty(T), BiTreeDepth(T));
cl = Root(T);
printf("二叉树的根为: %c\n", cl);
printf("\n前序遍历二叉树:");
PreOrderTraverse(T);
printf("\n中序遍历二叉树:");
InOrderTraverse(T);
printf("\n后序遍历二叉树:");
PostOrderTraverse(T);
return 0;
}
边栏推荐
- CSDN salary increase secret script: Jenkins integrated allure test report complete tutorial
- Will programmers become very professional in the future?
- Leetcode question brushing: hash table 05 (adding four numbers II)
- 正则表达式使用图床
- Leetcode: hash table 02 (intersection of two arrays)
- Paper reading (55):dynamic multi robot task allocation under uncertainty and temporary constraints
- GES图计算引擎HyG揭秘之图切分
- 矩阵分析笔记(一)
- 一,数组--滑动窗口问题--长度最小的子数组--水果成篮问题
- [QT] Chapter 10: Database
猜你喜欢

NetCF总结

Deep understanding of padding

Practical circuit analysis 3

Remote connection raspberry pie in VNC Viewer Mode

反直觉的三门问题,80%的人都会错?

Regular expression use graph bed

TT voice landing Zadig: open source co creates helm access scenario, and environmental governance can be done!

产品设计- 需求分析

2022 t elevator repair test question bank and simulation test

Leetcode: hash table 07 (sum of three numbers)
随机推荐
可编程全功能速率限制器设计硬件交换机
How to make good use of daily time to review efficiently?
Yapi installation
高级计网笔记(八)
After the Computer College changed its examination, the College of Cyberspace Security also changed its examination! Nanjing University of technology computer postgraduate entrance examination
【故障公告】取代 memcached 的 redis 出现问题造成网站故障
Torch learning (I): environment configuration
建立自己的网站(13)
可编程交换机上的近似公平排队阅读笔记
TT 语音落地 Zadig:开源共创 Helm 接入场景,环境治理搞得定!
高级计网笔记(九)
吃顿饭的时间,学会simulink之BLDC基本原理
【翻译】具有时间结构的特定信号的鲁棒提取(上)
【Qt】第十章:数据库
Asynchronous or thread pool
leetcode刷题:哈希表06 (赎金信)
leetcode刷题:哈希表03 (快乐数)
2022 t elevator repair test question bank and simulation test
WIN11 系统所有快捷键说明
Implementing Domain Driven Design - using ABP framework - General guidelines