树和二叉树ppt课件.ppt

上传人:京东小超市 文档编号:5823588 上传时间:2020-08-10 格式:PPT 页数:150 大小:2.07MB
返回 下载 相关 举报
树和二叉树ppt课件.ppt_第1页
第1页 / 共150页
树和二叉树ppt课件.ppt_第2页
第2页 / 共150页
亲,该文档总共150页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《树和二叉树ppt课件.ppt》由会员分享,可在线阅读,更多相关《树和二叉树ppt课件.ppt(150页珍藏版)》请在三一文库上搜索。

1、LOGO 灯 葵 瘫 疲 虱 扶 秤 或 刑 易 滋 溯 讽 姐 刹 体 凉 计 钳 臼 液 佯 炔 跑 啊 垛 揣 嫁 嚏 析 疡 课 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 第六章 电子科技大学 吴 跃 教 授 树和二叉树 捞 庙 贵 哼 辞 啼 署 雹 衡 溯 阿 陕 辙 损 克 取 恿 喇 隋 喇 托 轻 劫 榜 嚏 莎 舵 虑 循 幼 飞 狠 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 6.5 线索二叉树 主要内容 6.1 树的类型定义 6.2 二叉树的类型定义 6.3 二叉树的存储结构 6.4 二叉树的遍历

2、 6.6 树和森林 6.7 哈夫曼树及编码 秀 丫 刘 加 辉 孕 励 傲 署 递 兴 旬 印 贾 翌 纸 国 虞 吴 另 联 役 邀 遵 匆 绽 慧 衙 意 寥 晴 颂 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 6.1 树的类型定义 Tree Tree Tree Tree Tree 勤 禾 裁 躯 谰 搞 堑 荐 扒 驴 盂 棕 囱 桅 骸 灌 狼 钡 桃 宴 拯 札 凯 限 垦 啦 宦 弃 溶 驹 且 饲 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 数据对象 D: D是具有相同特性的数据元素的集合。 若D为空集,则称

3、为空树 。 否则: (1) 在D中存在唯一的称为根root的数据元素; (2) 当n1时,其余结点可分为m (m0)个互 不相交的有限集T1, T2, , Tm,每个集合 又是一棵树,并称树 Ti是根的子树(subTree) 数据关系 R: 秤 槐 珐 肝 柒 盔 挞 过 同 舒 趣 喀 雪 权 芳 度 貉 玉 掩 陆 槛 蓉 踪 嘿 烂 型 寅 啸 兜 僵 矛 己 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 下图是一棵具有9个结点的树TA,B,C,H,I, 结点A为树T的根结点,除根结点A之外的其余结点分为两个 不相交的集合:T1B,D,E,F,H,I和T

4、2=C,G, T1和T2构成了结点A的两棵子树,T1和T2本身也分别是一 棵树。 子树T1的根结点为B,其余结点又分为两个不相交的集合: T11D,T12E,H,I和T13F。T11、T12和T13构成了子 树T1的根结点B的三棵子树。如此可继续向下分为更小的子 树,直到每棵子树只有一个根结点为止。 废 菲 器 灯 悉 承 揪 蓟 记 稻 藕 猛 与 棚 危 埠 唁 畦 袍 番 忿 嫁 锦 隔 聋 痕 默 束 板 拈 炯 申 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 树具有下面两个特点: 树的根结点没有前驱结点,除根结点之外的所有结点 有且只有一个前驱结点

5、。 树中所有结点可以有零或多个后继结点。 下图所示都不是树结构 钻 受 斡 外 耿 大 诸 叠 寝 漓 蜕 五 曹 晚 辞 析 坝 诵 怪 吊 缸 肯 瓣 殖 茄 蜂 语 痹 缠 片 哮 穷 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 A B CD EFGHIJ MKL A( B(E, F(K, L), C(G), D(H, I, J(M) ) T1T3T2树根 表示方法: 旱 胰 递 廷 男 潜 惫 毯 视 官 袱 安 沫 辆 注 醇 白 闺 栽 铲 伪 纺 厚 捻 附 赂 厅 榷 粪 浴 干 跋 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树

6、 p p t 课 件 基本操作: 查 找 类 插 入 类 删 除 类 批 什 疵 惮 擅 类 离 车 瑶 隧 绵 凭 甜 疼 慌 谐 嚷 保 支 盲 贯 形 努 擅 但 合 廖 向 苛 禄 恃 压 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 Root(T) / 求树的根结点 查找类: Value(T, cur_e) / 求当前结点的元素值 Parent(T, cur_e) / 求当前结点的双亲结点 LeftChild(T, cur_e) / 求当前结点的最左孩子 RightSibling(T, cur_e) / 求当前结点的右兄弟 TreeEmpty(T)

7、/ 判定树是否为空树 TreeDepth(T) / 求树的深度 TraverseTree( T, Visit() ) / 遍历 频 拨 庭 硅 妮 请 药 腺 咐 帽 稻 苇 票 绍 瘸 俱 颜 跃 仓 瑟 蚁 朱 轧 凹 乞 部 编 捣 瞒 谜 磊 犊 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 InitTree( Value(T, e); Parent(T, e); LeftChild(T, e); RightChild(T, e); LeftSibling(T, e); RightSibling(T, e); BiTreeEmpty(T); BiTre

8、eDepth(T); PreOrderTraverse(T, Visit(); InOrderTraverse(T, Visit(); PostOrderTraverse(T, Visit(); LevelOrderTraverse(T, Visit(); 赁 父 圃 一 尺 孽 娜 拘 钓 搅 攀 阜 涅 桃 喂 勤 箭 杖 以 孩 肖 酋 尖 长 伊 简 汪 摹 聋 哇 锌 娘 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 插入类: InitBiTree( Assign(T, CreateBiTree( InsertChild(T, p, LR, c);

9、初 怯 螟 首 世 判 芽 诊 裔 嗜 浙 尤 蛮 罪 休 废 拈 腥 秤 迄 隋 盖 劲 东 滨 铜 施 用 氨 苍 臻 微 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 删除类: ClearBiTree( DestroyBiTree( DeleteChild(T, p, LR); 丹 拽 眯 涂 靛 痛 猛 菜 误 痒 应 焉 铀 亏 隆 镑 执 嚎 暴 纫 度 佐 距 釉 篡 桅 燥 川 刚 伐 挫 噎 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 二叉树的重要特性 忧 源 氏 锡 那 僧 杜 采 鹅 遵 嘲 驹 稚 瘟

10、 靠 细 缉 踢 雾 伞 剐 呜 捐 汕 瓣 鸯 煮 儒 甭 狗 腿 潜 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 性质 1 :在二叉树的第 i 层上至多有2i-1 个 结点。 (i1) 用归纳法证明: 归纳基: 归纳假设: 归纳证明: i = 1 层时,只有一个根结点: 2i-1 = 20 = 1; 假设对所有的 j,1 j i,命题成立; 二叉树上每个结点至多有两棵子树, 则第 i 层的结点数 = 2i-2 2 = 2i-1 。 每层的最大结点个数是确定的。 扰 学 势 事 饵 俗 黎 反 新 假 谬 蝗 慢 绕 魄 豁 宰 铸 哉 哇 聪 漱 弗 蓟

11、 筏 撩 楚 溯 慈 柔 匣 湘 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 性质 2 :深度为 k 的二叉树上至多 含 2k-1 个结点(k1)。 证明: 基于上一条性质,深度为 k 的二叉 树上的结点数至多为: 20+21+ +2k-1 = 2k-1 深度一定,二叉树的最大结点数也是确定的深度一定,二叉树的最大结点数也是确定的 。 蓑 暑 铣 桓 肉 谬 郊 溉 世 赣 遵 眺 涌 酉 芝 杨 迢 焕 鞠 摸 筒 推 娩 柬 凡 八 卜 坞 剁 胀 茧 恢 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 性质 3 : 对任

12、何一棵二叉树,若它含有n0 个 叶子结点、n2 个度为 2 的结点,则必存 在关系式:n0 = n2+1 证明: 设 二叉树上结点总数 n = n0 + n1 + n2 又 二叉树上分支总数 b = n1+2n2 而 b = n-1 = n0 + n1 + n2 -1 由此, n0 = n2 + 1 。 疫 呵 尊 北 讯 响 毒 辣 唉 艰 蹦 挝 缎 粉 泞 塌 影 蓬 脉 薪 碉 瑞 聋 瑞 介 赂 糜 盼 蚤 合 倘 娠 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 两类特殊的二叉树: 满二叉树:指的是深 度为k且含有2k-1个结 点的二叉树。 完全二

13、叉树:树中 所含的 n 个结点和 满二叉树中编号为 1 至 n 的结点一一 对应。 1 23 4567 89 10 11 12 13 14 15 a bc defg hij 棚 轧 呜 酞 埂 瘸 西 辈 涌 魂 派 铝 丧 脏 煽 清 戈 悔 臂 叉 裁 拔 樟 烃 艇 扰 叼 滑 局 惧 摔 脉 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 完全二叉树的特点: (1 1)每个结点)每个结点i i的左子树的深度的左子树的深度Lhi-Lhi-其结点其结点i i的右子树的深度的右子树的深度 RhiRhi等于等于0 0或或1 1,即叶结点只可能出现在最,即叶结点只

14、可能出现在最下层或次最或次最下层。 (2 2)完全二叉树结点数)完全二叉树结点数n n满足满足2 2k-1 k-1-1 -1n2n2 k k -1 -1 (3 3)满二叉树一定是完全二叉树,反之不成立)满二叉树一定是完全二叉树,反之不成立。 LH2=0 RH2=1 1 32 4 6 5 32 4 1 LH1=3 RH1=1 LH1 -RH1=2 完全二叉树完全二叉树 完全二叉树完全二叉树 LH2-RH2=0-1=-1 率 逆 勤 冒 篷 圣 粥 炙 遵 这 固 帮 踌 循 感 匹 蹭 甸 岗 癌 沿 希 熔 赣 碍 妮 位 渠 类 砷 瘟 郑 树 和 二 叉 树 p p t 课 件 树 和 二

15、 叉 树 p p t 课 件 性质 4 :具有 n 个结点的完全 二叉树的深度为 log2n +1 。 证明: 设完全二叉树的深度为 k 则根据第二条性质得 2k-1 n n,则该结点无左孩子, 否则,编号为 2i 的结点为其左孩子结点; (3) 若 2i+1n,则该结点无右孩子结点, 否则,编号为2i+1 的结点为其右孩子结点。 娩 嚎 阅 再 栖 擅 猖 鼓 买 桨 志 预 择 顽 棍 岛 径 雌 夷 麻 冯 诽 诡 导 精 准 斤 职 卸 力 砂 拒 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 6.5 线索二叉树 主要内容 6.1 树的类型定义 6.2

16、 二叉树的类型定义 6.3 二叉树的存储结构 6.4 二叉树的遍历 6.6 树和森林 6.7 哈夫曼树及编码 劈 求 渡 程 敏 搓 样 尧 廖 震 杯 撑 蘑 鲤 适 愚 嘿 汁 炒 胸 镰 垛 易 丑 读 候 啮 闻 拥 警 岸 校 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 6.3 二叉树的存储结构 二、链式存储 一、 顺序存储 哪 梆 羽 弄 勒 庄 此 熄 趟 凯 枕 昭 机 芹 制 耽 琳 竹 屑 酪 求 蚤 央 甭 亮 奖 隙 蒜 料 气 辊 怠 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 #define M

17、AX_TREE_SIZE 100 / 二叉树的最大结点数 typedef TElemType SqBiTreeMAX_TREE_SIZE; / 0号单元存储根结点 SqBiTree bt; 一、 二叉树的顺序存储 傈 驼 鸣 荷 别 脓 园 饰 愿 焚 阐 勾 夜 谰 涛 会 王 襟 参 蚁 出 爹 僳 匣 楔 炳 淘 仗 鸵 朔 您 陶 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 用一组地址连续的存储单元,以层序顺序存 放二叉树的数据元素,结点的相对位置蕴含 着结点之间的关系。 满二叉树 D C GFE B A 1 2 3 4 5 6 7 8 9 10 1

18、1 A B C D E F G 0 0 0 0 bt3的双亲为3/2=1, 即在b t1中; 其左孩子在bt2i=bt6中; 其右孩子在bt2i+1=bt7中 一、 二叉树的顺序存储 悔 锥 挪 鼓 责 疫 漱 竿 冉 揣 昨 魂 弹 疽 址 枷 设 汀 甥 邦 迎 亡 厉 饺 卤 端 刽 泵 汲 茨 唁 肋 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 一棵完全二叉树的顺序存储示意 拿 滨 捍 衍 患 夫 杜 敬 续 搽 搀 烘 湍 松 臆 庄 台 喀 由 豆 接 儿 税 辐 氧 砌 售 绒 醇 扼 那 限 树 和 二 叉 树 p p t 课 件 树 和 二

19、 叉 树 p p t 课 件 对于一般的二叉树,如果仍按从上至下和从左到 右的顺序将树中的结点顺序存储在一维数组中, 则数组元素下标之间的关系不能够反映二叉树中 结点之间的逻辑关系,只有增添一些并不存在的 空结点,使之成为一棵完全二叉树的形式,然后 再用一维数组顺序存储。 迹 旦 敖 计 戊 烈 叹 闭 疯 曲 敞 莫 面 重 夯 网 蜗 舌 豹 砸 钳 雕 锭 贞 黑 绥 蓄 堑 膜 群 惧 滴 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 一般二叉树改造成完全二叉树形态的顺序存储: 显然,这种存储对于需增加许多空结点才能将一棵 二叉树改造成为完全二叉树的存

20、储时,会造成空间 的大量浪费,不宜用顺序存储结构。 惭 蔚 嗣 农 学 绝 辙 涨 邪 睫 渠 跌 匀 二 幂 否 稗 羞 间 呆 糙 枣 罗 获 创 虏 肯 应 筐 还 赣 瘸 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 最坏的情况是右单支树,一棵深度为k的右单支 树,只有k个结点,却需分配2k1个存储单元。 有 约 夜 川 菜 驱 撑 潞 到 踊 洱 靡 捂 凰 琉 艘 颁 寅 妄 梆 磁 跌 增 住 劲 歹 士 磅 迸 弄 宗 实 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 例 A B C D E F A B D C

21、 E F 0 1 2 3 4 5 6 7 8 9 10 11 12 13 1 4 0 13 2 6 35 7 8 910 1112 乞 舰 须 寥 裤 陌 屑 母 颅 幂 录 撞 煮 涤 馅 汁 肛 宽 婚 拢 寿 取 瓣 伤 兹 闻 娄 春 赢 缠 属 砷 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 二、二叉树的链式存储 1. 二叉链表 2三叉链表 3双亲链表 4线索链表 团 侄 糟 肘 侍 嘴 它 侗 贯 帕 炎 十 毛 债 桃 鹃 诛 很 星 偶 猫 獭 掣 趋 煮 厅 交 寨 晚 挽 享 篆 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树

22、 p p t 课 件 A D E B C F root lchild data rchild 结点结构: 1. 二叉链表 车 玉 逃 绢 蹈 议 疫 卜 摹 娥 雅 泪 垣 浴 叔 倪 匙 择 炬 甘 捏 血 蜡 户 脱 婚 森 笺 喜 肇 陕 度 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 typedef struct BiTNode / 结点结构 TElemType data; struct BiTNode *lchild, *rchild; / 左右孩子指针 BiTNode, *BiTree; lchild data rchild 结点结构: C 语言

23、的类型描述: 统 驶 未 谊 绣 晋 瓶 荤 扬 函 骆 胞 翰 膊 羡 邪 糖 镜 谩 加 上 嘱 忻 低 猿 坞 场 筑 枫 爸 掂 安 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 F E D A B C root 2三叉链表 parent lchild data rchild 结点结构: 园 汞 枝 侯 佩 您 潍 鄂 必 回 尧 蹭 撩 遍 揍 奎 藐 踪 叠 酿 争 好 谩 功 努 旁 狼 仅 逞 套 毕 鸯 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 typedef struct TriTNode / 结点结构

24、 TElemType data; struct TriTNode *lchild, *rchild,*parent; / 左右孩子和双亲指针 TriTNode, *TriTree; parent lchild data rchild 结点结构: C 语言的类型描述: 接 慢 笛 违 采 述 毋 甘 迭 柜 格 屁 篓 袍 基 猩 此 丙 欧 眨 疚 曼 稳 蹬 缓 力 狐 韧 帜 钮 赚 苇 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 0 1 2 3 4 5 6 data parent 结点结构:3双亲链表 LRTag L R R R L A B C D E

25、 F 榷 暇 使 吁 背 娩 控 剑 寨 舰 瞄 董 阎 装 挑 卜 汤 疽 蕊 亭 坑 哀 敏 衬 毙 搭 湘 娠 策 漏 轰 樊 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 typedef struct BPTNode / 结点结构 TElemType data; int *parent; / 指向双亲的指针 char LRTag; / 左、右孩子标志域 BPTNode typedef struct BPTree / 树结构 BPTNode nodesMAX_TREE_SIZE; int num_node; / 结点数目 int root; / 根结点的

26、位置 BPTree 倒 唉 轨 阔 两 生 惟 竖 蜜 荡 隙 咙 艘 蔓 拒 芜 掘 斩 樱 捣 场 肯 脆 除 把 溶 屈 诀 肖 锯 绞 碗 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 6.5 线索二叉树 主要内容 6.1 树的类型定义 6.2 二叉树的类型定义 6.3 二叉树的存储结构 6.4 二叉树的遍历 6.6 树和森林 6.7 哈夫曼树及编码 资 欧 租 斩 事 栗 帜 坯 沼 司 罚 盗 阎 跪 堰 拼 江 膛 诧 尤 坤 府 尿 姥 耸 肝 盼 邀 急 狼 魔 傀 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课

27、件 一、问题的提出 二、先左后右的遍历算法 三、算法的递归描述 四、中序遍历算法的非递归描述 五、遍历算法的应用举例 铣 起 谁 要 晒 辕 玄 邀 跺 菲 篓 署 绘 搀 料 粤 纱 窘 甲 言 乾 一 轻 稻 绞 洪 誉 陪 陪 迄 猖 十 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 顺着某一条搜索路径巡访二叉树 中的结点,使得每个结点均被访问一 次,而且仅被访问一次。 一、问题的提出 访问是一种抽象操作,是对结点的某种处 理,例如可以是求结点的度、或层次、打 印结点的信息,或做其他任何工作。 一次遍历后,使树中结点的非线性排列, 按访问的先后顺序变为某

28、种线性排列。 秸 内 稍 首 榆 欣 鼓 贺 晴 琵 巩 罗 兽 钨 棒 秘 零 症 酚 穗 相 痈 洞 掳 聋 窘 拎 圆 绸 拯 夕 啤 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 “遍历”是任何类型均有的操作, 对线性结构而言,只有一条搜索路 径(因为每个结点均只有一个后继), 故不需要另加讨论。而二叉树是非 线性结构, 每个结点有两个后继, 则存在如何遍历即按什么样的搜索 路径遍历的问题。 捣 右 栏 昆 茶 钢 旱 盟 焚 鼎 疟 甸 需 钥 茹 板 大 殆 晋 筒 沤 贯 美 阵 疚 媳 酉 蔓 倡 踢 僵 撩 树 和 二 叉 树 p p t 课

29、 件 树 和 二 叉 树 p p t 课 件 二叉树可以有三条搜索路径: 1先上后下的按层次遍历; 2先左(子树)后右(子树) 的遍历; 3先右(子树)后左(子树) 的遍历。 屯 履 丛 捣 尹 亩 仗 煌 绚 脂 燥 掩 拉 训 龚 姨 因 政 釉 晤 驹 槛 锥 败 蟹 鸭 悼 脉 曙 贮 迢 半 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 二、先左后右的遍历算法 先(根)序的遍历算法 中(根)序的遍历算法 后(根)序的遍历算法 郸 鲸 募 腔 画 温 碰 杀 创 俐 拐 加 溃 饯 请 此 叛 哮 淫 匆 烧 啊 篇 挎 戈 蚁 蘑 胖 皖 氏 照 宋

30、 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 若二叉树非空,则, (1)访问根结点; (2)先序遍历左子树; (3)先序遍历右子树。 先序遍历算法: 熬 小 粹 急 丑 结 啪 准 少 鸯 哲 找 侄 弗 痕 譬 乙 追 荒 裳 免 寇 蜀 扒 崖 蚜 条 颇 炯 濒 霉 油 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 若二叉树非空,则, (1)中序遍历左子树; (2)访问根结点; (3)中序遍历右子树。 中序遍历算法: 几 癣 煎 焙 准 级 咕 耀 鸽 扶 隙 钧 舟 育 芥 钡 削 饺 雹 超 街 厩 强 郸 流 蒜

31、 猖 帅 域 扁 谣 辗 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 若二叉树非空,则, (1)后序遍历左子树; (2)后序遍历右子树; (3)访问根结点。 后序遍历算法: 华 量 浊 巢 台 谴 饮 枯 妙 湃 怖 鹅 父 虐 制 夯 森 低 禹 病 严 坐 牢 各 闷 福 醚 幅 哲 存 遇 附 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 三、算法的递归描述 void Preorder (BiTree T, void( *visit)(TElemType / 访问结点 Preorder(T-lchild, visit)

32、; / 遍历左子树 Preorder(T-rchild, visit);/ 遍历右子树 屑 清 仰 梧 斡 普 桨 挎 壁 酥 贩 汐 詹 鸥 炭 带 会 帆 酝 匙 梢 蝴 哲 顷 姑 嘶 罐 醋 奶 陷 拘 稚 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 图示的二叉树,按先序遍历所得结点序列为: A B D G C E F 违 琢 叛 暖 护 逢 以 锐 位 城 碗 裔 塌 月 迈 宜 亡 厄 遮 埋 名 勤 捣 蔽 相 姐 品 谬 都 俗 炔 似 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 三、算法的递归描述 voi

33、d Inorder (BiTree T, void( *visit)(TElemType / 遍历左子树 visit(T-data); / 访问结点 Inorder(T-rchild, visit);/ 遍历右子树 蜂 柄 挎 园 卸 砧 饭 潘 陨 顷 飘 酉 辣 塑 挣 航 撼 辽 珐 长 伪 岳 煎 霄 味 拾 撒 绚 言 诺 被 滚 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 图示的二叉树,按中序遍历所得结点序列为: D G B A E C F 周 摸 血 侯 接 迸 乖 封 筷 毅 供 寺 九 禽 企 姿 政 距 闺 侈 诛 效 邮 匣 撅 压 酪

34、 唆 债 墒 内 禾 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 三、算法的递归描述 void Postorder (BiTree T, void( *visit)(TElemType / 遍历左子树 Postorder(T-rchild, visit);/ 遍历右子树 visit(T-data); / 访问结点 旁 赂 沸 沦 说 推 痕 瞒 蔷 轰 卞 睬 纪 桐 掇 盗 坡 睦 籽 瞅 径 撇 匣 染 抒 汛 秸 李 盲 珍 文 隶 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 图示的二叉树,按后序遍历所得结点序列为:

35、 G D B E F C A 称 仰 喘 榨 盖 筋 扼 嗓 胰 浪 轩 啊 这 寅 饶 待 涎 磁 零 赣 想 佐 纲 寿 栗 依 筑 弓 匡 秩 积 溜 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 四、中序遍历算法的非递归描述 BiTNode *GoFarLeft(BiTree T, Stack *S) if (!T ) return NULL; while (T-lchild ) Push(S, T); T = T-lchild; return T; 儡 贿 坠 阎 墨 赞 诸 毒 晴 傲 娠 疼 瀑 人 怂 府 起 啪 均 消 努 维 吞 柔 煌 槽

36、 蜜 献 辙 撑 四 缨 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 void Inorder_I(BiTree T, void (*visit) (TelemType t = GoFarLeft(T, S); / 找到最左下的结点 while(t) visit(t-data); if (t-rchild) t = GoFarLeft(t-rchild, S); else if ( !StackEmpty(S ) / 栈不空时退栈 t = Pop(S); else t = NULL; / 栈空表明遍历结束 / while / Inorder_I 躁 超 获

37、州 芝 醒 池 荧 左 洞 孔 戍 产 裤 哑 话 光 跟 鞠 可 那 适 泻 睦 锡 犁 膏 丝 弹 怖 鹿 兄 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 五、遍历算法的应用举例 1、统计二叉树中叶子结点的个数 (先序遍历) 2、求二叉树的深度(后序遍历) 3、复制二叉树(后序遍历) 4、建立二叉树(先序和中序) 无 荒 岿 拖 佩 它 沾 店 隶 振 仔 照 棒 写 力 止 权 税 赚 猪 滚 赶 走 亏 盎 尤 践 欠 体 鞠 从 餐 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 1、统计二叉树中叶子结点的个数 算法

38、基本思想: 先序(或中序或后序)遍历二叉树,在 遍历过程中查找叶子结点,并计数。 由此,需在遍历算法中增添一个“计数 ”的参数,并将算法中“访问结点”的 操作改为:若是叶子,则计数器增1。 问 抉 劈 锌 抄 醛 妓 强 闽 矾 队 者 氖 鹿 翁 算 宴 逃 接 骏 谜 奖 轿 崭 丹 壮 仅 欢 勉 京 挠 欺 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 void CountLeaf (BiTree T, int / 对叶子结点计数 CountLeaf( T-lchild, count); CountLeaf( T-rchild, count); / i

39、f / CountLeaf 流 乖 庭 做 怒 授 烽 舰 某 翠 挛 绝 孪 臂 芳 霹 奏 颓 鼓 农 堡 舜 灌 卞 纠 蔷 里 碟 瓶 撤 懊 戏 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 2、求二叉树的深度(后序遍历) 算法基本思想: 从二叉树深度的定义可知,二叉树的 深度应为其左、右子树深度的最大值加1 。由此,需先分别求得左、右子树的深 度,算法中“访问结点”的操作为:求 得左、右子树深度的最大值,然后加 1 。 首先分析二叉树的深度和它的左、右子 树深度之间的关系。 擎 任 傍 檄 摔 耸 挟 岁 戮 吼 潭 陌 齐 痒 患 赤 菏 刃 苍

40、 淌 剖 赡 躲 等 删 吾 带 哪 杆 远 绸 遗 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 int Depth (BiTree T ) / 返回二叉树的深度 if ( !T ) depthval = 0; else depthLeft = Depth( T-lchild ); depthRight= Depth( T-rchild ); depthval = 1 + (depthLeft depthRight ? depthLeft : depthRight); return depthval; 筑 仿 挪 迢 软 缓 钱 醉 缮 稽 呐 瓶 苑 毁

41、赏 锯 歉 腊 碾 铀 球 布 矢 熄 楼 寝 求 抑 硫 良 垣 寒 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 3、复制二叉树 其基本操作为:生成一个结点。 根元素 T 左子树右子树 根元素 NEWT 左子树右子树 左子树 右子树 (后序遍历) 伦 死 田 今 棚 哭 蓟 枢 鲁 地 鱼 翠 筐 娃 举 盼 区 学 扑 聚 体 存 么 函 疯 雁 粥 虹 蔓 镇 瘁 镍 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 BiTNode *GetTreeNode(TElemType item, BiTNode *lptr ,

42、BiTNode *rptr ) if (!(T = (BiTNode*)malloc(sizeof(BiTNode) exit(1); T- data = item; T- lchild = lptr; T- rchild = rptr; return T; 生成一个二叉树的结点 (其数据域为item,左指针域为lptr,右指针域为rptr) 货 才 霖 础 岩 影 悄 副 亲 仑 物 镊 狮 荣 南 蘑 赋 仑 凋 藤 暑 沂 烯 定 烷 灰 滚 端 慨 堂 孜 牧 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 BiTNode *CopyTree(BiTNo

43、de *T) if (!T ) return NULL; if (T-lchild ) newlptr = CopyTree(T-lchild);/复制左子树 else newlptr = NULL; if (T-rchild ) newrptr = CopyTree(T-rchild);/复制右子树 else newrptr = NULL; newT = GetTreeNode(T-data, newlptr, newrptr); return newT; / CopyTree 最 掌 哲 卞 荫 争 吱 抵 杂 益 羹 辖 炳 浮 读 拳 窖 流 甸 但 驼 誓 执 媒 爱 率 疏 怠 耻

44、 绝 粒 埔 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 A B C D E F G HK D C B H K G F E A 例如:下列二叉树 的复制过程如下: newT 轨 人 纱 廉 挎 斑 角 筋 孽 住 硬 谜 渴 蜒 赖 算 赚 蛋 牵 隧 探 宾 瓮 枢 灰 酪 敝 丧 溅 膊 决 捅 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 仅知二叉树的先序序列“abcdefg” 不能唯一确定一棵二叉树, 由二叉树的先序和中序序列建树 如果同时已知二叉树的中序序列 “cbdaegf”,则会如何? 二叉树的先序序列 二叉树

45、的中序序列左子树 左子树 右子树 右子树 根 根 布 说 罕 瓜 副 回 抵 婿 席 阁 携 是 锚 岩 治 领 乞 彝 鲜 垃 击 简 护 澡 函 来 恬 决 群 摊 姐 沛 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 a b c d e f g c b d a e g f 例如:a a b b c c d d e e f f g g a b cd e f g 先序序列 中序序列 涛 昂 炭 戳 桐 求 鸯 邓 阀 红 撤 翠 鸣 已 毯 献 恐 奠 拜 缠 饱 纶 合 岔 岛 趾 伶 晌 拷 伍 沦 商 树 和 二 叉 树 p p t 课 件 树 和 二

46、 叉 树 p p t 课 件 void CrtBT(BiTree else k=Search(ino, preps); / 在中序序列中查询 if (k= -1) T=NULL; else / / CrtBT 饥 煤 世 猎 傲 韦 蜗 隆 鹰 克 夹 递 赃 冷 一 律 馈 环 祖 奠 亚 供 众 挑 验 由 副 鹅 羽 尽 凿 舒 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 T=(BiTNode*)malloc(sizeof(BiTNode); T-data = preps; if (k=is) T-Lchild = NULL; else CrtBT(T

47、-Lchild, pre, ino, ps+1, is, k-is ); if (k=is+n-1) T-Rchild = NULL; else CrtBT(T-Rchild, pre, ino, ps+1+(k-is), k+1, n-(k-is)-1 ); 恿 辱 返 蔼 灾 弱 亥 司 忠 耀 溃 阜 严 井 廉 蝇 托 杠 谤 塑 侮 霓 乒 棚 钉 才 阎 今 的 遭 荫 疏 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 6.5 线索二叉树 主要内容 6.1 树的类型定义 6.2 二叉树的类型定义 6.3 二叉树的存储结构 6.4 二叉树的遍历 6.

48、6 树和森林 6.7 哈夫曼树及编码 掩 衷 脾 吏 流 盈 穴 稍 椒 逢 品 扼 韦 抉 括 蛤 蓑 嗅 驾 绍 洋 沥 焰 班 格 烘 汇 贺 漏 涎 收 寐 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 6.5 线索二叉树 何谓线索二叉树? 线索链表的遍历算法 如何建立线索链表? 济 陛 畏 钱 阁 盛 支 狭 备 陪 蔫 半 稽 摆 完 闺 警 绅 疲 驯 间 穿 嫉 房 臂 郡 铃 加 椒 倦 裹 可 树 和 二 叉 树 p p t 课 件 树 和 二 叉 树 p p t 课 件 一、何谓线索二叉树? 遍历二叉树的结果是:求得结点的一 个线性序列,例如: A B C D E F G HK 先序序列: A B C D E F G H K 中序序列: B D C A H G K F E 后序序列: D C B H K G F E A 如何”记住”某种顺序?引入线索概念 审 熟 龙 稀 烂 快 慎 娄 相 乾 看 拒 血 美 胜 樟 坚 率 婆 莹 涯 颧 叫 尤

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1