求某一维度的最大值_数据结构二叉树(一)

这篇博客介绍了树的基本概念,包括树的定义、逻辑结构表示方法和基本术语。讨论了树的性质,如结点的度、树的度、高度等,并讲解了如何在不同存储结构中查找结点的双亲和孩子。此外,还详细阐述了树的遍历方法(先根、后根、层次遍历)以及如何设计算法求解树的高度。内容特别关注了如何在二叉树中寻找某一维度的最大值问题。
摘要由CSDN通过智能技术生成

树的定义

树是由n(n≥0)个结点组成的有限集合(记为T)。

如果n=0,它是一棵空树,这是树的特例。

如果n>0,这n个结点中存在(有仅存在)一个结点作为树的根结点(root),其余结点可分为m(m≥0)个互不相交的有限集T1、T2、…、Tm,其中每个子集本身又是一棵符合本定义的树,称为根结点的子树。

树是一种非线性数据结构,具有以下特点:

每一结点可以有零个或多个后继结点,但有且只有一个前驱结点(根结点除外)。

数据结点按分支关系组织起来,清晰地反映了数据元素之间的层次关系。

c4d1a5fd6997697a8653568fba81d1d8.png

抽象数据类型树的描述

d84d590fc293e7af8d88d8ef89df8c07.png

树的逻辑结构表示方法

树形表示法。这是树的最基本的表示,使用一棵倒置的树表示树结构,非常直观和形象。

531c033462a8fc37f155c5903b27804e.png

文氏图表示法。使用集合以及集合的包含关系描述树结构。

1d82140e484eb5fc72ba776341e45517.png凹入表示法。使用线段的伸缩关系描述树结构。

4e36f3577c31503701fba348da71f235.png

括号表示法。将树的根结点写在括号的左边,除根结点之外的其余结点写在括号中并用逗号分隔。

b3b482d37863ca68b8d073ac0122535c.png

列表表示法。 “[根结点,子树1,子树2,…,子树m]”。

9df0b607a952cc9fb103da02308284bb.png

树的基本术语

结点的度。树中每个结点具有的子树数或者后继结点数称为该结点的度。

2eec18c9270fa292f7a01697f93ecfe2.png

树的度。树中所有结点的度的最大值称之为树的度。

bbe08f3e425144ae5a91a1aae7b065d2.png

分支结点。度大于0的结点称为分支结点或非终端结点。度为1的结点称为单分支结点,度为2的结点称为双分支结点,依次类推。

617bc1439c2cc0f5fe06a75d884866dd.png

叶子结点(或叶结点)。度为零的结点称为叶子结点或终端结点。

683eca4c624460b65386b8a513f6f0c9.png

孩子结点。一个结点的后继称之为该结点的孩子结点。

8999322cb9b35b680a3e122d9b07244c.png

双亲结点(或父亲结点)。一个结点称为其后继结点的双亲结点。

1fd2a7b96f0fa72556dd4cc822d9d344.png

子孙结点。一个结点的子树中除该结点外的所有结点称之为该结点的子孙结点。

6613b520206d8cc4785512edea7cd9c1.png

祖先结点。从树根结点到达某个结点的路径上通过的所有结点称为该结点的祖先结点(不含该结点自身)。

05b18d1c53e4645396649b2662c33fd7.png

兄弟结点。具有同一双亲的结点互相称之为兄弟结点。

99b6fd76ae089693e806b7173ccd783d.png

结点层次。树具有一种层次结构,根结点为第一层,其孩子结点为第二层,如此类推得到每个结点的层次。

c64d0d972674fa8fdf90bd5b79b50183.png

树的高度。树中结点的最大层次称为树的高度或深度。

a032ecbc6ffc73177b4a49751aa10815.png

森林。零棵或多棵互不相交的树的集合称为森林。

fc83ed603be060ac177671c994bc9d15.png

树的性质

性质1:  树中的结点数等于所有结点的度数加1。

ef288dd148e5770d6fc48dc52059d39b.png

性质2:度为m的树中第i层上至多有mi-1个结点,这里应有i≥1。

数学归纳法证明

当一棵m次树的第i层有mi-1个结点(i≥1)时,称该层是满的,若一棵m次树的所有叶子结点在同一层,并且每一层都是满的,称为满m次树。显然,满m次树是所有相同高度的m次树中结点总数最多的树。

也可以说,对于n个结点,构造的m次树为满m次树或者接近满m次树,此时树的高度最小。

3c1916583ae63603f4ffe451370996e5.png

80a64192c1b7ad6c426b991c0fd6837d.png

31554a37af2d9a2dba6b41034b0c5c24.png

若一棵三次树中度为3的结点为2个,度为2的结点为1个,度为1的结点为2个,则该三次树中总的结点个数和度为0的结点个数分别是多少?

e1e8076fb3e328df08a465dcfde8b8a2.png

树的基本运算

树的运算主要分为三大类:

查找满足某种特定关系的结点,如寻找当前结点的双亲结点等;

插入或删除某个结点,如在树的当前结点上插入一个新结点或删除当前结点的第i个孩子结点等;

遍历树中每个结点。

树的遍历运算是指按某种方式访问树中的每一个结点且每一个结点只被访问一次。

有以下3种遍历方法:

先根遍历

若树不空,则先访问根结点,然后依次先根遍历各棵子树。

后根遍历

若树不空,则先依次后根遍历各棵子树,然后访问根结点。

层次遍历

若树不空,则自上而下自左至右访问树中每个结点。

注意:先根和后根遍历算法都是递归的。

8705c75a50c9c0d8d3e20b592d1031d3.png

树的存储结构

双亲存储结构

这种存储结构是一种顺序存储结构,用一组连续空间存储树的所有结点,同时在每个结点中附设一个伪指针指示其双亲结点的位置。

8d2beba17a33d258b6fc2bd12a062bf1.png

双亲存储结构

利用了每个结点(根结点除外)只有唯一双亲的性质。

这种存储结构中,求某个结点的双亲结点十分容易,但求某个结点的孩子结点时需要遍历整个结构。

例子:若一棵树采用双亲存储结构t存储,设计一个算法求指定索引是i的结点的层次。

9181acffdaa2901b4a48993cfb7f1ae5.png

孩子链存储结构

个结点包含结点值和所有孩子结点指针,可按一个结点的度设计结点的孩子结点指针个数

c2fa79c6ae3a18ffa4b5c4c581849820.png

孩子链存储结构

优点是查找某结点的孩子结点十分方便。

缺点是查找某结点的双亲结点比较费时。

若一棵树采用孩子链存储结构t存储,设计一个算法求其高度

解:一棵树的高度为根的所有子树高度的最大值加1。求整棵树的高度为“大问题”,求每棵子树高度为“小问题”。设f(t)为求树t的高度,对应的递归模型如下:

197736ff53cb844aec522d3222af730d.png

9b550a9b5e44fd3d677020d4801d2566.png

长子兄弟链存储结构

长子兄弟链存储结构是为每个结点设计三个域:一个数据元素域,一个指向该结点的长子的指针域,一个指向该结点的下一个兄弟结点指针域。

bfdb59239cd9e776f2aec2a7d9482ce3.png

长子兄弟链存储结构

优点是查找某结点的孩子结点十分方便。

缺点是查找某结点的双亲结点比较费时。

若一棵树采用长子兄弟链存储结构t存储,设计一个算法求其高度。

解:一棵树的高度为根的所有子树高度的最大值加1。求整棵树的高度为“大问题”,求每棵子树高度为“小问题”。设f(t)为求树t的高度,对应的递归模型如下:

197736ff53cb844aec522d3222af730d.png

1e63f6f777d65ca0bd48577166db5f0b.png

列表存储结构

将树的列表表示(树的逻辑表示法之一)直接采用Python中的列表数据类型表示,称为树的列表存储结构。

9d84d43cd695ec3b9fc67f96cb9a4654.png

若一棵树采用列表存储结构t存储,设计一个算法求其高度。 解:一棵树的高度为根的所有子树高度的最大值加1。求整棵树的高度为“大问题”,求每棵子树高度为“小问题”。设f(t)为求树t的高度,对应的递归模型如下:

197736ff53cb844aec522d3222af730d.png

4d1e8f3010cf6bab32bfcfb485365208.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值