Chapter二叉树的遍历.pptx
《Chapter二叉树的遍历.pptx》由会员分享,可在线阅读,更多相关《Chapter二叉树的遍历.pptx(61页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、18.6 8.6 二叉树遍历二叉树遍历二叉树遍历二叉树遍历n 8.6.1 遍历二叉树的定义遍历二叉树的定义n n 二叉树遍历二叉树遍历二叉树遍历二叉树遍历是指按照某种顺序是指按照某种顺序是指按照某种顺序是指按照某种顺序访问访问访问访问二叉树中的每个节二叉树中的每个节二叉树中的每个节二叉树中的每个节点,使每个节点被访问一次,且只被访问一次。点,使每个节点被访问一次,且只被访问一次。点,使每个节点被访问一次,且只被访问一次。点,使每个节点被访问一次,且只被访问一次。n n “访访访访问问问问”的的的的含含含含义义义义:是是是是指指指指对对对对节节节节点点点点施施施施行行行行某某某某种种种种操操操操
2、作作作作,操操操操作作作作可可可可以以以以是是是是输输输输出出出出节节节节点点点点信信信信息息息息,修修修修改改改改节节节节点点点点的的的的数数数数据据据据值值值值等等等等,但但但但要要要要求求求求这这这这种种种种访访访访问问问问不破坏它原来的数据结构不破坏它原来的数据结构不破坏它原来的数据结构不破坏它原来的数据结构。n n 以以以以二叉链表二叉链表二叉链表二叉链表作为二叉树的存储结构。作为二叉树的存储结构。作为二叉树的存储结构。作为二叉树的存储结构。第1页/共61页2uu 例例例例 假设一棵二叉树存储着有关人事方面的信息,每个节点假设一棵二叉树存储着有关人事方面的信息,每个节点假设一棵二叉树
3、存储着有关人事方面的信息,每个节点假设一棵二叉树存储着有关人事方面的信息,每个节点含有姓名、工资等信息。管理和使用这些信息时可能需要作这含有姓名、工资等信息。管理和使用这些信息时可能需要作这含有姓名、工资等信息。管理和使用这些信息时可能需要作这含有姓名、工资等信息。管理和使用这些信息时可能需要作这样一些工作:样一些工作:样一些工作:样一些工作:(1 1)将每个人的)将每个人的)将每个人的)将每个人的工资提高工资提高工资提高工资提高20%20%;(2 2)打印打印打印打印每个人的姓名和工资;每个人的姓名和工资;每个人的姓名和工资;每个人的姓名和工资;(3 3)求最低工资数额和领取最低工资的)求最
4、低工资数额和领取最低工资的)求最低工资数额和领取最低工资的)求最低工资数额和领取最低工资的人数人数人数人数。对于(对于(对于(对于(1 1),访问是),访问是),访问是),访问是对工资值进行修改对工资值进行修改对工资值进行修改对工资值进行修改的操作;的操作;的操作;的操作;对于(对于(对于(对于(2 2),访问的含义是),访问的含义是),访问的含义是),访问的含义是打印该节点的信息打印该节点的信息打印该节点的信息打印该节点的信息;对于(对于(对于(对于(3 3),访问只是),访问只是),访问只是),访问只是检查和统计检查和统计检查和统计检查和统计。不管访问的具体操作是什么,都必须做到不管访问的
5、具体操作是什么,都必须做到不管访问的具体操作是什么,都必须做到不管访问的具体操作是什么,都必须做到既无重既无重既无重既无重复,又无遗漏复,又无遗漏复,又无遗漏复,又无遗漏。第2页/共61页3线性结构的遍历线性结构的遍历线性结构的遍历线性结构的遍历非线性结构的遍历非线性结构的遍历非线性结构的遍历非线性结构的遍历只要按照结构原有的线只要按照结构原有的线只要按照结构原有的线只要按照结构原有的线性顺序,从第一个元素性顺序,从第一个元素性顺序,从第一个元素性顺序,从第一个元素起依次访问各元素即可。起依次访问各元素即可。起依次访问各元素即可。起依次访问各元素即可。v每个节点可能有一个以上每个节点可能有一个
6、以上每个节点可能有一个以上每个节点可能有一个以上的直接后继;的直接后继;的直接后继;的直接后继;v必须必须必须必须规定遍历的规则规定遍历的规则规定遍历的规则规定遍历的规则,并,并,并,并按此规则遍历二叉树;按此规则遍历二叉树;按此规则遍历二叉树;按此规则遍历二叉树;v最后得到二叉树所有节点最后得到二叉树所有节点最后得到二叉树所有节点最后得到二叉树所有节点的一个的一个的一个的一个线性序列线性序列线性序列线性序列。线性结构与非线性结构遍历的区别线性结构与非线性结构遍历的区别第3页/共61页4n 8.6.2 遍历二叉树的方式遍历二叉树的方式n n 深度优先遍历:深度优先遍历:深度优先遍历:深度优先遍
7、历:是尽可能地沿分支节点向深度方向进是尽可能地沿分支节点向深度方向进是尽可能地沿分支节点向深度方向进是尽可能地沿分支节点向深度方向进行周游。节点既可以在向下遍历之前访问,也可以在从子行周游。节点既可以在向下遍历之前访问,也可以在从子行周游。节点既可以在向下遍历之前访问,也可以在从子行周游。节点既可以在向下遍历之前访问,也可以在从子树返回之前访问。树返回之前访问。树返回之前访问。树返回之前访问。n n 广度优先遍历:广度优先遍历:广度优先遍历:广度优先遍历:是按照从上到下、从左到右的顺序进是按照从上到下、从左到右的顺序进是按照从上到下、从左到右的顺序进是按照从上到下、从左到右的顺序进行层次访问节
8、点。行层次访问节点。行层次访问节点。行层次访问节点。A AB BE EHHJ JD DL LI IKKC CGGF FMM第4页/共61页5深度优先遍历深度优先遍历1 1、一棵二叉树由三部分组成:、一棵二叉树由三部分组成:、一棵二叉树由三部分组成:、一棵二叉树由三部分组成:根节点(根节点(根节点(根节点(V V);左子树();左子树();左子树();左子树(L L););););右子树(右子树(右子树(右子树(R R)。)。)。)。V VL LR R2 2、若规定:、若规定:、若规定:、若规定:L L:遍历根节点的左子树:遍历根节点的左子树:遍历根节点的左子树:遍历根节点的左子树 ;R R:遍
9、历根节点的右子树;:遍历根节点的右子树;:遍历根节点的右子树;:遍历根节点的右子树;V V:访问根节点。:访问根节点。:访问根节点。:访问根节点。则遍历二叉树有则遍历二叉树有则遍历二叉树有则遍历二叉树有6 6种方式:种方式:种方式:种方式:VLR LVR LRVVLR LVR LRV VRL RVL RLV VRL RVL RLV 若规定按若规定按若规定按若规定按先左子树后右子树先左子树后右子树先左子树后右子树先左子树后右子树的顺序进行遍历,则有:的顺序进行遍历,则有:的顺序进行遍历,则有:的顺序进行遍历,则有:VLRVLR:前序遍历(先根遍历):前序遍历(先根遍历):前序遍历(先根遍历):前
10、序遍历(先根遍历)LVRLVR:中序遍历(中根遍历):中序遍历(中根遍历):中序遍历(中根遍历):中序遍历(中根遍历)LRVLRV:后序遍历(后根遍历):后序遍历(后根遍历):后序遍历(后根遍历):后序遍历(后根遍历)演示演示演示演示8-18-1第5页/共61页6n 8.6.3 前序遍历前序遍历1 1、前序遍历的递归定义、前序遍历的递归定义、前序遍历的递归定义、前序遍历的递归定义若二叉树为空,遍历结束;否则若二叉树为空,遍历结束;否则若二叉树为空,遍历结束;否则若二叉树为空,遍历结束;否则(1 1)访问根节点;()访问根节点;()访问根节点;()访问根节点;(V V)(2 2)前序遍历根节点的
11、左子树;()前序遍历根节点的左子树;()前序遍历根节点的左子树;()前序遍历根节点的左子树;(L L)(3 3)前序遍历根节点的右子树。()前序遍历根节点的右子树。()前序遍历根节点的右子树。()前序遍历根节点的右子树。(R R)A AB BD DE EF FC CHHI IGG前序遍历的序列:前序遍历的序列:前序遍历的序列:前序遍历的序列:A B D G H C E I FA B D G H C E I F演示演示演示演示8-28-2前序序列的第一个元素前序序列的第一个元素必为二叉树的根节点必为二叉树的根节点第6页/共61页72 2、前序遍历的递归算法、前序遍历的递归算法、前序遍历的递归算法
12、、前序遍历的递归算法template template void void PreOrderPreOrder(BinaryTreeNode BinaryTreeNode *t t)if(if(t t!=!=NULLNULL)Visit(t);Visit(t);PreOrderPreOrder(t t-LeftChildLeftChild););PreOrderPreOrder(t t-RightChild RightChild););第7页/共61页8n 8.6.4 中序遍历中序遍历1 1、中序遍历的递归定义、中序遍历的递归定义、中序遍历的递归定义、中序遍历的递归定义若二叉树为空,遍历结束;否
13、则:若二叉树为空,遍历结束;否则:若二叉树为空,遍历结束;否则:若二叉树为空,遍历结束;否则:(1 1)中序遍历根节点的左子树;()中序遍历根节点的左子树;()中序遍历根节点的左子树;()中序遍历根节点的左子树;(L L)(2 2)访问根节点;()访问根节点;()访问根节点;()访问根节点;(V V)(3 3)中序遍历根节点的右子树。()中序遍历根节点的右子树。()中序遍历根节点的右子树。()中序遍历根节点的右子树。(R R)A AB BD DE EF FC CHHI IGG中序遍历的序列:中序遍历的序列:中序遍历的序列:中序遍历的序列:G D H B G D H B A A E I C F
14、E I C F演示演示演示演示8-38-3中序序列的中序序列的根节点根节点恰为恰为左右子树的中序序列的左右子树的中序序列的分界分界点点第8页/共61页92 2、中序遍历的递归算法、中序遍历的递归算法、中序遍历的递归算法、中序遍历的递归算法template template void void InOrderInOrder(BinaryTreeNode BinaryTreeNode *t t)if(if(t t!=!=NULLNULL)InOrderInOrder(t t-LeftChildLeftChild););Visit(t);Visit(t);InOrderInOrder(t t-Rig
15、htChild RightChild););第9页/共61页10n 8.6.5 后序遍历后序遍历1 1、后序遍历的递归定义、后序遍历的递归定义、后序遍历的递归定义、后序遍历的递归定义若二叉树为空,遍历结束;否则:若二叉树为空,遍历结束;否则:若二叉树为空,遍历结束;否则:若二叉树为空,遍历结束;否则:(1 1)后序遍历根节点的左子树;()后序遍历根节点的左子树;()后序遍历根节点的左子树;()后序遍历根节点的左子树;(L L)(2 2)后序遍历根节点的右子树。()后序遍历根节点的右子树。()后序遍历根节点的右子树。()后序遍历根节点的右子树。(R R)(3 3)访问根节点;()访问根节点;()
16、访问根节点;()访问根节点;(V V)A AB BD DE EF FC CHHI IGG后序遍历的序列:后序遍历的序列:后序遍历的序列:后序遍历的序列:G H D B I E F C G H D B I E F C A A演示演示演示演示 8-48-4后序序列的后序序列的最后最后一个元素一个元素必为二叉树的必为二叉树的根节点根节点第10页/共61页113 3、后序遍历的递归算法、后序遍历的递归算法、后序遍历的递归算法、后序遍历的递归算法template template void void PostOrderPostOrder(BinaryTreeNode BinaryTreeNode *t
17、t)if(if(t t!=!=NULLNULL)PostOrderPostOrder(t t-LeftChildLeftChild););PostOrderPostOrder(t t-RightChild RightChild););Visit(t);Visit(t);第11页/共61页12n 8.6.6 遍历表达式二叉树遍历表达式二叉树1 1、可以把任意一个算术表达式用一棵二叉树表示、可以把任意一个算术表达式用一棵二叉树表示、可以把任意一个算术表达式用一棵二叉树表示、可以把任意一个算术表达式用一棵二叉树表示表达式的形式:表达式的形式:表达式的形式:表达式的形式:根节点为根节点为根节点为根节点
18、为操作符操作符操作符操作符;第一操作数为第一操作数为第一操作数为第一操作数为左子树左子树左子树左子树;第二操作数为第二操作数为第二操作数为第二操作数为右子树右子树右子树右子树。u 例如:表达式例如:表达式例如:表达式例如:表达式a/(b-c)*d+ea/(b-c)*d+e的二叉树表示为:的二叉树表示为:的二叉树表示为:的二叉树表示为:+*/d dc ce e-a ab b第12页/共61页132 2、对该二叉树分别进行前序、对该二叉树分别进行前序、对该二叉树分别进行前序、对该二叉树分别进行前序、中序和后序遍历,得到以下三中序和后序遍历,得到以下三中序和后序遍历,得到以下三中序和后序遍历,得到以
19、下三种不同形式:种不同形式:种不同形式:种不同形式:(1 1)前序遍历:)前序遍历:)前序遍历:)前序遍历:+*/a-bcde+*/a-bcde(前缀表(前缀表(前缀表(前缀表达式,波兰式)达式,波兰式)达式,波兰式)达式,波兰式)(2 2)中序遍历:)中序遍历:)中序遍历:)中序遍历:a/b-c*d+ea/b-c*d+e(中缀表(中缀表(中缀表(中缀表达式)达式)达式)达式)(3 3)后序遍历:)后序遍历:)后序遍历:)后序遍历:abc-/d*e+abc-/d*e+(后缀表(后缀表(后缀表(后缀表达式,逆波兰式)达式,逆波兰式)达式,逆波兰式)达式,逆波兰式)3 3、前缀表达式前缀表达式前缀
20、表达式前缀表达式和和和和后缀表达式后缀表达式后缀表达式后缀表达式在编译程序中有着非常在编译程序中有着非常在编译程序中有着非常在编译程序中有着非常重要的作用。重要的作用。重要的作用。重要的作用。+*/d dc ce e-a ab b表达式为表达式为表达式为表达式为a/(b-c)*d+ea/(b-c)*d+e第13页/共61页14u 例例例例:表达式表达式表达式表达式 Exp=Exp=a*ba*b+(c-d/e)*f(c-d/e)*fl 前缀式:前缀式:前缀式:前缀式:+*ab*-c/def*ab*-c/defl 中缀式:中缀式:中缀式:中缀式:a*ba*b+c-d/e*fc-d/e*fl 后缀式
21、:后缀式:后缀式:后缀式:ab*ab*cde/-f*+cde/-f*+结论:三种表达方式结论:三种表达方式结论:三种表达方式结论:三种表达方式 VS.VS.原始表达式原始表达式原始表达式原始表达式(1 1)操作数之间的相对次序不变;)操作数之间的相对次序不变;)操作数之间的相对次序不变;)操作数之间的相对次序不变;(2 2)运算符的相对次序不同;)运算符的相对次序不同;)运算符的相对次序不同;)运算符的相对次序不同;(3 3)中缀式丢失了括号信息,致使运算的次序不确)中缀式丢失了括号信息,致使运算的次序不确)中缀式丢失了括号信息,致使运算的次序不确)中缀式丢失了括号信息,致使运算的次序不确定、
22、无意义。定、无意义。定、无意义。定、无意义。第14页/共61页15u 例例例例:表达式表达式表达式表达式 Exp=Exp=a*ba*b+(c-d/e)*f(c-d/e)*fl 前缀式:前缀式:前缀式:前缀式:+*ab*-c/def*ab*-c/def(4 4)前缀式的运算规则为:连续出现的)前缀式的运算规则为:连续出现的)前缀式的运算规则为:连续出现的)前缀式的运算规则为:连续出现的两个操作数两个操作数两个操作数两个操作数和和和和它们它们它们它们之前之前之前之前紧靠它们的紧靠它们的紧靠它们的紧靠它们的运算符运算符运算符运算符构成一个最小表达式;构成一个最小表达式;构成一个最小表达式;构成一个最
23、小表达式;l 后缀式:后缀式:后缀式:后缀式:ab*ab*cde/-f*+cde/-f*+(5 5)后缀式的运算规则为:运算符在式中的顺序恰好)后缀式的运算规则为:运算符在式中的顺序恰好)后缀式的运算规则为:运算符在式中的顺序恰好)后缀式的运算规则为:运算符在式中的顺序恰好为表达式的运算顺序;为表达式的运算顺序;为表达式的运算顺序;为表达式的运算顺序;每个每个每个每个运算符运算符运算符运算符和它和它和它和它之前之前之前之前出现且紧靠它的出现且紧靠它的出现且紧靠它的出现且紧靠它的两个操作数两个操作数两个操作数两个操作数构构构构成一个最小表达式。成一个最小表达式。成一个最小表达式。成一个最小表达式
24、。演示演示演示演示 8-58-5第15页/共61页16n 后缀表达式的特点:后缀表达式的特点:后缀表达式的特点:后缀表达式的特点:后缀表达式后缀表达式后缀表达式后缀表达式与表达式的操作数的先后次序相同与表达式的操作数的先后次序相同与表达式的操作数的先后次序相同与表达式的操作数的先后次序相同,只是运,只是运,只是运,只是运算符的先后次序有所改变,算符的先后次序有所改变,算符的先后次序有所改变,算符的先后次序有所改变,后缀表达式的运算符次序就后缀表达式的运算符次序就后缀表达式的运算符次序就后缀表达式的运算符次序就是其执行次序是其执行次序是其执行次序是其执行次序;后缀表达式中后缀表达式中后缀表达式中
25、后缀表达式中没有括号没有括号没有括号没有括号(因为括号的作用就是改变运算(因为括号的作用就是改变运算(因为括号的作用就是改变运算(因为括号的作用就是改变运算次序,既然后缀表达式中已经考虑了运算规则,所以就次序,既然后缀表达式中已经考虑了运算规则,所以就次序,既然后缀表达式中已经考虑了运算规则,所以就次序,既然后缀表达式中已经考虑了运算规则,所以就不需要括号了)。不需要括号了)。不需要括号了)。不需要括号了)。u 如何从后缀式求值?如何从后缀式求值?如何从后缀式求值?如何从后缀式求值?例例例例:表达式表达式表达式表达式 Exp=a*b+(c-d/e)*fExp=a*b+(c-d/e)*f,后缀式
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Chapter 二叉 遍历
限制150内