当前课程知识点:数据结构(上) > 第五章 二叉树 > (b)树的表示 > 05B-3 孩子
既然这里矛盾的焦点在于
如何找到每一个节点的孩子
那么我们不妨对于任何一个节点
都将它的孩子汇聚起来
构成一个更小的数据集
顺着这种思路
我们可以大致采用这种可行的方法
也就是将所有的节点
汇聚为一个序列 像刚才那样
不同的在于这里
还需要为每一个节点
准备一个名为children的引用
而这个引用所指向的 就是
我们刚才所说的 由它的所有的孩子
构成的一个小的数据集
当然 如果你愿意的话
可以将每一个这样的小的数据集
无论是它
还是它
分别地组织为
一个我们此前已经熟知的序列
比如说向量 或者像这个图示上
所画的那样是列表
比如对于R这个节点而言
它所对应的孩子
应该按照这里的记录是0 1 2
那么0 1 2是什么意思呢?
我们可以猜出来 就应该是
它的孩子在整个这个序列中的秩
具体来说 也就是0对应于A
1对应于B和2对应于C
所以0 1 2实际上恰好对应的
就是R的三个孩子A B C
同理 对于F这个节点来说
它的孩子记录项对应的是7 8 9
查表可以看出 其实也就是7对应的是G
8对应的是H和9对应的是K
换而言之 F这个节点的孩子
应该恰好就像原来这棵树上
是G H和K
由此我们可见
每当我们需要查找某一个节点的孩子
现在我们只需要从对应的这个节点
比如说F所对应的children这个引用出发
找到对应的那个数据集
并且在比如说
这样的一个列表中 依次地查找
直到找到所需要的那个孩子
由此可见
无论是从空间的角度
还是从时间的角度
任何一个节点所需要的计算量
都线性正比于它的孩子的数目
也就是它的度数
那么这样的一个实现效率
还是可以接受的
然而另一方面的问题又在于
我们现在自然解决了向下的查找问题
而刚才父节点表示法
向上的查找优势却丧失殆尽
不难发现 为了查找某一个节点的父亲
我们又不得不去遍历整个线性序列
并且逐一地翻看它所对应的孩子记录
在最坏的情况下
我们有可能需要到最后一个节点的
最后一个孩子处才命中自己
从而验证自己是对应的
这个节点的孩子
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-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)深度优先搜索--作业
-第六章 图--本章测验