- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
;;
(1)先序遍历;5;A 9;先序、中序和后序遍历过程:遍历过程中经过结点的路线一
样,只是访问各结点的时机不同。
图中在从入口到出口的曲线上用三种符号分别标记出了先序、
中序和后序访问各结点的时刻入口.; 二叉树的非递归遍历
中序遍历非递归遍历算法
非递归算法实现的基本思路:使用堆栈;?中序遍历非递归遍历算法
? 遇到一个结点,就把它压栈,并去遍历它的左子树;
? 当左子树遍历结束后,从栈顶弹出这个结点并访问它;
? 然后按其右指针再去中序遍历该结点的右子树。
void InOrderTraversal( BinTree BT )
{ BinTree T=BT;
Stack S = CreatStack( MaxSize ); /*创建并初始化堆栈S*/
while( T || !IsEmpty(S) ){;;;层序遍历
;“遍历”是二叉树最重要的基本操作,是各种其它操作的基础,二叉树的许多其它操作都可以通过遍历来实现。如建立二叉树的存储结构、求二叉树的结点数、求二叉树的深度等。;;{;【例】 二元运算表达式树及其遍历
+;【例】 由两种遍历序列确定二叉树
答案是:
必须要有中序遍历才行!已知三种遍历中的任意两种遍历序列,
能否唯一确定一棵二叉树呢?;? 先序和中序遍历序列来确定一棵二叉树
〖分析〗
? 根据先序遍历序列第一个结点确定根结点;
? 根据根结点在中序遍历序列中分割出左右两个子序列
? 对左子树和右子树分别递归使用相同的方法继续分解。;a;;;;都是“尾递归”;;2.查找最大和最小元素
最大元素一定是在树的最右分枝的端结点上
最小元素一定是在树的最左分枝的端结点上
18;}; 三、二叉搜索树的插入
〖分析〗关键是要找到元素应该插入的位置,
可以采用与Find类似的方法;;【例】以一年十二个月的英文缩写为键值,按从一月到十二月顺序输
入,即输入序列为(Jan, Feb, Mar, Apr, May, Jun, July, Aug, Sep,
Oct, Nov, Dec)
Jan;四、二叉搜索树的删除
考虑三种情况:
要删除的是叶结点:直接删除,并再修改其父结点指针---置为NULL
〖例〗:删除 35
30; 要删除的结点只有一个孩子结点:
将其父结点的指针指向要删除结???的孩子结点
〖例〗:删除 33;要删除的结点有左、右两棵子树:
用另一结点替代被删除结点:右子树的最小元素 或者 左子树的最大元素
〖例〗:删除 41;
文档评论(0)