Lecture 11

本文深入探讨了二叉树的概念、性质和应用场景,包括二叉树的定义、不同类型的二叉树如完美二叉树和完全二叉树的特点,以及在表达式树和Ropes字符串类中的应用。此外,还介绍了结点的操作如retrieve()、left()、right(),并分析了二叉树操作的时间复杂度和空间效率。
摘要由CSDN通过智能技术生成

绪论

作为树状数据结构最为重要的一个分支——二叉树,和课本一样,在树的后面单独拿出来进行介绍。


Binary tree

Binary tree就是二叉树的意思。在实现和了解二叉树的应用之前,首先需要明白二叉树的定义是什么。有课件上的定义如下:

二叉树的每个结点有两个孩子,每个孩子可能为空或者另一棵二叉树子树。

在这里插入图片描述

有另外的定义如下:

每个结点的度都小于等于n的树称为n叉树。

我本来认为这样的定义远比上面模糊且抽象的定义要更加精简确切,但当我仔细品味英文定义中exactly这个词的意思,又有了新的理解:

因为在二叉树中,左右子节点,左右子树往往分别起着不同的作用。

即使一个分支节点只有一个子节点,我们也会称这个子节点为左(右)子节点,空着的指针指向的为空着的右(左)子节点。也就是说另一个结点只是内容上不存在,但它概念上存在,且对另一个子节点“确实”起到了类似于占位的作用,即使只有一个子节点,这个子节点在概念上也需要称为左子节点或者右子节点。

如果你是初学者,只是按照结点度的数值关系来理解二叉树,就会对度为1的结点的子节点还需要分左右而产生困惑,影响后面树堆等的定义的理解(但是对于有一定的基础的人这么理解反而更加简洁ohhhhhhh)。

因为结点的度小于等于2,可以根据结点的度将结点划分为三类:full node,leaf node,neither。

在这里插入图片描述

所有的结点都是full node的二叉树称为full binary tree,不过需要注意的是,full虽然是满的意思,但这个full binary tree和满二叉树大概确实不是一个东西hhhh(一个是国内版,一个是国际版)。

这种二叉树比较经典的运用就是哈夫曼树和表达式树。

在这里插入图片描述

实现的方面,因为二叉树是树的一个重要的分支(就是说还是属于树),所以(一般的二叉树)和树在类的构造方面上基本都是一致的。

retrieve(),left(),right()

在这里插入图片描述

is_leaf()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值