数据结构——树

文章介绍了树作为一种层次性数据结构的定义和特性,强调了树的层次管理和子树概念。接着讨论了用链表表示树的挑战,提出了儿子兄弟表示法,即二叉树,其中每个节点有两个指针。进一步,文章引入了二叉搜索树,这是一种特殊的二叉树,其中左子树的键值小于根节点,右子树的键值大于根节点,且左右子树都是二叉搜索树。满二叉树和完全二叉树作为二叉搜索树的特例也被提及。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,什么是树

树是一种具有层次性的数据结构,由于它具有分层次的特点使得通过树在管理上具有更高的效率。

定义:实质上就是有n个结点构成的有限集合(当n=0时称该树为空树)

非空树(n!=0)的性质:

1,树中有一个称为“根”的特殊结点,用r表示;

2,其余的每个结点又被分为互不相交的有限集,而每个集合本身又可以成为树,称作原来树的“子树”(子树互不相交);

树的基本术语:

 (图片取自https://www.icourse163.org/learn/ZJU-93001?tid=120001#/learn/content?type=detail&id=404017&cid=434044

二,树的表示

我们可以思考一下,用链表或数组的形式来实现树这么一种数据结构。如果用数组的话,由于树多层次性和多分枝的特点导致只能顺序存储的数组无法实现,这种办法pass。那我们就将目光转向链表,但是由于树不同结点的子树个数的不同,使得树上不同结点指针不同,导致链表的指针个数无法统一,难以实现,好嘛,那就一不做二不休,把所有链表的指针个数都设置为这棵树拥有最多结点的根的个数,但是这样一来就会造成巨大的空间损失。

因此可以采用一种新的链表的形式——儿子兄弟表示法

在这种表示方法下,每个结点的结构统一,都是有两个指针,同时这种方法空间损失不大。且它每个结点有两个“儿子”,因此我们将它命名为“二叉树” 。

三,二叉搜索树

回想之前所学的顺序查找和二分法查找,我们明白二分查找的速度会快很多,但是由于二分查找是在数组中实现的,因此对数组中的元素进行增添和删除非常困难,那用什么办法可以又快的搜寻我们想要的结果又可以方便的完成增添和删除呢?是的,由于树本质是通过链表实现的,我们可以通过树的形式进行实现。

我们可以构建一种树,这棵树根左边的结点都小于右边的结点,这样既方便我们查找又方便我们进行操作。

满二叉树:在一棵二叉树中,如果所有分支结点都有左、右孩子结点,并且叶子结点都集中在二叉树的最下层,这样的二叉树称为满二叉树

完全二叉树:若二叉树中最多只有最下面两层的结点的度可以小于2,并且最下面一层的叶子结点都依次排列在该层最左边的位置上,则这样的二叉树称为完全二叉树。

特点:二叉搜索树的所有非空左子树的键值都比根节点要小;

           所有非空右子树的键值都比根节点要大;

            且左右子树都是二叉搜索树;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值