当前课程知识点:数据结构(上) > 第五章 二叉树 > (d)二叉树实现 > 05D-1 BinNode类
同学们好
在此前的几节 我们先后学习了
树的概念
了解了树的特点
并且懂得了如何来表示一棵树
具体来说 这里最重要的方法
就是借助二叉树
来表示任何一棵有根有序树
所以接下来我们就要来具体讨论
如何在C++语言中
实现一棵二叉树
二叉树的基本组成单位是二叉树节点
称作Binary Nodes 或简称BinNode
每一个BinNode的逻辑组成
可以用这样一幅图来表示
我们可以看到
每一个BinNode节点
首先应该有一个data域
也就是记录它携带的信息
这个是整个BinNode节点的
核心的要素
当然孤立的BinNode是没有任何意义的
因此作为一个整体的结构
它也应该配备相应的引用域
分别指向左右孩子以及父亲
此外呢 作为在树中的一个特定元素
它也需要记录一些重要的指标
比如说在这里最最重要的指标
就是height 高度
那么我们也后面会看到 二叉树
尤其是基于二叉树实现的
各种二叉搜索树
将会有各种各样不同的指标
比如说对于红黑树而言
那么可能就会有所谓的颜色的区别
对于左式堆而言
也有所谓的npl指标
诸如此类地
所以也需要为它们留有余地
每个节点都是通过引用
去指向其它的节点
反过来 每个节点也通过引用
被其它的节点所指向
我们笼统地称每个节点
所占据的这个空间为一个位置
就像我们在列表中一样
对应于一个Position
因此我们为了在概念上进行统一
不妨就将指向BinNode节点的
这样一种类型就称为
BinNodePosi节点位置
以下我们就可以来真正的定义
名为BinNode的这样一个开放的类
按图索骥
我们可以看到
确实每一个BinNode节点
都配有parent、lChild
和rChild三个引用
也包括data域
以及刚才我们所说的
height之类的指标
这里也给出了BinNode
所需要提供的一些基本的操作接口
包括size() 返回它的规模
也就是包括它在内所有后代的总数
也包括一些它与其它的节点相互作用
使得整个二叉树在拓扑结构上
发生变化的一些操作接口
比如说insertAsLC
或者是right Child(也即:insertAsRC)
将某一个特定的数值生成为一个节点
并且作为当前节点的
左或右孩子接入其中
另外还有一个接口是非常重要的
这个名为succ()
也就是后继的接口
与我们在线性结构中一样
它返回的是当前节点
在我们稍后要介绍的
中序遍历的意义下的直接后继
稍后我们还会就此详作解释
当然对于树型结构而言
最重要的莫过于它的基本操作
也就是遍历
在这里我们将针对四种
最最基本的遍历
分别提供一个对应的接口
我们后面会看到很多算法
实际上都可以解释
并且实现为这样的遍历的模式
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-OJ系统说明
--关于OJ
--1-注册与登录
--2-界面与选课
--3-提交测试
-关于课程教材与讲义
--课程教材与讲义
-关于讨论区
--关于讨论区
-微信平台
--html
-PA晋级申请
--PA晋级
-(a)计算
--演示
--(a)计算--作业
-(b)计算模型
-(b)计算模型--作业
-(c)大O记号
-(c)大O记号--作业
-(d)算法分析
-(d)算法分析--作业
-(e)迭代与递归
-(e)迭代与递归--作业
-(xc)动态规划
-- 演示
-(xc)动态规划--作业
-本章测验--作业
-(a)接口与实现
--02A-5 复制
-(a)接口与实现--作业
-(b)可扩充向量
-(b)可扩充向量--作业
-(c)无序向量
--02C-1 概述
--02C-3 插入
--02C-6 查找
--02C-8 遍历
-(c)无序向量--作业
-(d1)有序向量:唯一化
-(d1)有序向量:唯一化--作业
-(d2)有序向量:二分查找
-(d2)有序向量:二分查找--作业
-(d3)有序向量:Fibonacci查找
-(d3)有序向量:Fibonacci查找--作业
-(d4)有序向量:二分查找(改进)
-(d4)有序向量:二分查找(改进)--作业
-(d5)有序向量:插值查找
-第二章 向量(下)--(d5)有序向量:插值查找
-(e)起泡排序
--02E-2 改进
--02E-3 反例
-(e)起泡排序--作业
-(f)归并排序
-(f)归并排序--作业
-本章测验--作业
-(a)接口与实现
--03A-4 实现
-(a)接口与实现--作业
-(b)无序列表
--03B-2 查找
-(b)无序列表--作业
-(c)有序列表
--03C-3 查找
-(c)有序列表--作业
-(d)选择排序
--03D-1 构思
--03D-2 实例
--03D-3 实现
--03D-4 推敲
--03D-6 性能
-(d)选择排序--作业
-(e)插入排序
--03E-1 经验
--03E-2 构思
--03E-3 对比
--03E-4 实例
--03E-5 实现
-(e)插入排序--作业
-(xd)习题辅导:LightHouse
-本章测验--作业
- (a)栈接口与实现
--04A-1 栈
--04A-2 实例
--04A-3 实现
- (a)栈接口与实现--作业
-(c1)栈应用:进制转换
-第四章 栈与队列--(c1)栈应用:进制转换
-(c2)栈应用:括号匹配
-(c2)栈应用:括号匹配--作业
-(c3)栈应用:栈混洗
-第四章 栈与队列--(c3)栈应用:栈混洗
-(c4)栈应用:中缀表达式求值
-(c4)栈应用:中缀表达式求值--作业
-(c5)栈应用:逆波兰表达式
-第四章 栈与队列--(c5)栈应用:逆波兰表达式
-(d)队列接口与实现
--04D-1 接口
--04D-2 实例
--04D-3 实现
-第四章 栈与队列--本章测验
-(a)树
--05A-1 动机
--05A-2 应用
-(a)树--作业
-(b)树的表示
--05B-2 父亲
--05B-3 孩子
-第五章 二叉树--(b)树的表示
-(c)二叉树
-(c)二叉树--作业
-(d)二叉树实现
-(d)二叉树实现--作业
-(e1)先序遍历
-(e1)先序遍历--作业
-(e2)中序遍历
-第五章 二叉树--(e2)中序遍历
-(e4)层次遍历
-第五章 二叉树--(e4)层次遍历
-(e5)重构
-(e5)重构--作业
-本章测验--作业
-(a)概述
-(a)概述--作业
-(b1)邻接矩阵
-(b1)邻接矩阵--作业
-(c)广度优先搜索
--06C-2 策略
--06C-3 实现
--06C-5 实例
-(c)广度优先搜索--作业
-(d)深度优先搜索
--06D-1 算法
--06D-2 框架
--06D-3 细节
-(d)深度优先搜索--作业
-第六章 图--本章测验