当前课程知识点:数据结构(上) > 第五章 二叉树 > (c)二叉树 > 05C-2 真二叉树
我们刚才所介绍的一般性的二叉树
只对每个节点的出度
做了个上限的约定
也就是说不得超过2
换而言之 可能有三种情况
有些节点是没有出度的
也就是所谓的叶子节点
对应的指标是0
另一个极端是有些节点
可能有两个孩子
那么也就是对应于指标2
还有一些节点呢
只有一个孩子
对应的指标也就是1
比如在这样一幅图中
我们就将每个节点的指标
也就是它的出度
记在这个节点本身上
我们可以看到 0度的节点
也就是我们所说的叶子节点
以及满度的和两度的节点
双分支的
以及1度的单分支的节点
这样一般性的一棵二叉树在很多操作
包括算法的实现
以及对算法的理解上
都会引来一些不必要的麻烦
而反过来一个比较有效的改进方法
就是将任何的这样一棵
一般性的二叉树
转化为一棵所谓的真二叉树
那么什么是一棵真二叉树呢?
简而言之就是
每个节点的出度都是偶数
或者是0
或者是2
但是绝对不可能是1
为此我们可以假想着
为每一个节点添加上
足够多个孩子节点
具体来说 如果某一个节点
原来的度数是0
那么我们就在它的下方
通过增加两个新的孩子
使之变成两度
如果某一个节点原先的度数是1
我们就在缺失的那一侧
同样地引入一个新的孩子节点
从而同样使得它的度数由1变成2
这样一棵新得到的二叉树中
就不再含有1度的节点
我们称这种二叉树为真二叉树
请注意 尽管表面看来
这里添加了很多节点
但是不难证明 从渐近的意义上讲
它们的总数依然保持
与原先的规模相当
而更重要的是在稍后
我们实现相应的算法的时候就会看到
这种添加实际上完全是假想的
你并不需要真正去引入它们
你只需要假想着它们存在
你的算法就可以更加简洁的实现
而且更加简洁的被理解
这样一种策略
就犹如伽利略所擅长的那种
在头脑中的虚拟实验一样
你只要想象它
它背后的逻辑是对的
你并不需要在实际中
将它严格的兑现
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-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)深度优先搜索--作业
-第六章 图--本章测验