【数据结构C#】树与二叉树

本文深入探讨了树与二叉树的概念、性质及其在C#中的存储结构,包括双亲表示法、孩子表示法和孩子兄弟表示法(二叉树表示法)。此外,还详细介绍了二叉树的特殊类型、遍历方法,如先序、中序、后序和层次遍历,以及线索二叉树的构建和遍历。文章还涵盖了树和森林与二叉树之间的转换以及遍历方法。
摘要由CSDN通过智能技术生成

目录

概念

树的性质

树的存储结构 

双亲表示法

孩子表示法

孩子兄弟表示法 (也称二叉树表示法)

二叉树

几个特殊的二叉树

二叉树的性质

二叉树的存储结构

顺序存储结构 

链式存储结构 

 二叉树的遍历   

先序遍历

中序遍历

后序遍历

层次遍历

线索二叉树

线索二叉树的存储结构

 线索二叉树的构造  

线索二叉树的遍历

树,森林与二叉树的转换

树和森林的遍历


是n(n>0)个节点的有限集,树是一种递归的数据结构。

概念

空树  子树

结点 子孙 双亲 孩子 兄弟  度  分支结点和叶子结点

结点的深度,高度和层次

有序树和无序树

路径和路径长度

森林

树的性质

树中的结点树等于所有结点的的度数加1

度为m的树中第i层上至多有m^(i-1)个结点

高度为h的m叉树至多有(m^h-1)/(m-1)个结点

具有n个结点的m叉树的最小高度为 logm(n(m-1)+1)向上取整

树的存储结构 

双亲表示法

该存储结构利用了每个结点(除根结点外)只有唯一双亲的性质,可以很快得到每个结点的双亲结点,但求结点的孩子时需要遍历整个结构

#define MAXSIZE 100;//树中最多结点数

typedef struct{//树的结点定义
	ElemType data;//数据域
	int parent;//双亲位置域
}PTNode;

typedef struct{//树的类型定义
	PTNode nodes[MAXSIZE];//双亲表示
	int n;//结点数
}PTree;

孩子表示法

孩子表示法是将每个结点的孩子结点都用单链表连接起来形成一个线性结构,此时n个结点就有n个孩子链表(叶子结点的孩子链表为空表)

这种存储方式寻找子女的操作非常直接,而寻找双亲的操作则需要遍历n个结点中孩子链表指针域所指向的n个孩子链表

 

 

孩子兄弟表示法 (也称二叉树表示法)

以二叉链表作为树的存储结构。孩子兄弟法是每个结点包含三部分内容:结点值,指向结点第一个孩子的指针,及指向结点下一个兄弟结点的指针(沿此域可以找到结点的所有兄弟结点)

这种存储方式比较灵活,其最大的优点是可以方便的实现树转换为二叉树的操作,易于查找结点的孩子等,但缺点是从当前结点查找其双亲结点比较麻烦。若为每一个结点增设一个parent域指向其父结点,则查找结点的父结点也很方便

typedef struct{
	ElemType data;//数据域
	struct CSNode *fistchild,nextsibling;//第一个孩子和右兄弟指针
}CSNode,*CSTree;

二叉树

是另一种树形结构,其特点是每个结点最多只有两颗子树(即二叉树中不存在度大于2的结点),并且二叉树子树有左右之分,其次序不能任意颠倒。二叉树是有序树。

几个特殊的二叉树

 满二叉树:一颗高度为h,且含有2^h-1个结点的二叉树称为满二叉树,即树中的每层都含有最多的结点

完全二叉树:高度为h,有n个结点的二叉树,当且仅当其每个结点都与高度为h的满二叉树编号为1~n的结点一一对应时,称为完全二叉树。其叶子结点只能出现在最下层和次下层,且最下层的叶子结点集中在树的左部。需要注意的是,满二叉树肯定是完全二叉树,而完全二叉树不一定是满二叉树。

 二叉排序树:左子树上所有结点的关键字军小于根结点的关键字;右子树上所有结点的关键字均大于根结点的关键字;左子树和右子树又各是一颗二叉排序树

平衡二叉树:树上任一结点的左子树和右子树的深度只差不超过1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老坛酸菜吃鸭子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值