算法导论12.2-8 二叉搜索树的非递归遍历先驱节点分析

思路
就是先调用minimum找到二叉树中的最小关键字的结点,即二叉树最左边的树叶,然后依然迭代地调用tree_successor寻找前一个结点x的后继:即比x->key大的所有关键字中最小的一个的节点。依次输出即可。
minimum很容易理解,利用蛮力一直往左遍历,到底即可。
tree_successor分两种情况,如果x有右子树,则x的后继就是右子树中最小关键字的那个结点,如果x没有右子树,则后继是x的最底层祖先。最底层祖先听着很拗口,用图示表示就是:13号结点的后继是15,15即为13的后继,13的祖先有15和30,而15为13的最底层祖先。
这里写图片描述

分析:
其复杂度取决于访问结点的总次数,注意在bst_successor 访问其后继结点时,可能需要回溯多个父结点,或者一起往左访问多个结点。

对于度数为1的结点(叶子结点),需要访问一次;

度数为2的结点,需要访问两次,比如仅有左孩子的中间结点,第一次访问是想遍历其左子树信息,第二次访问是访问自己;

度数为3的结点,需要访问三次,

访问结点的总次数等于结点的度数之和,由于树的每一条边贡献两个度数,则结点的度数之和等于树的边数*2,

又根据平面图的欧拉定理r=e-v+2 (对于树来讲r=1),于是n个结点的树的边数为n-1,所以访问结点的总次数为2(n-1),即O(n)。

于是命题得证。

参考:http://blog.csdn.net/wdq347/article/details/8818687

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录(Table of Contents)   前言(Preface)   第一部分(Part I) 基础(Foundations)   第一章 计算算法的角色(The Role of Algorithms in Computing)   第二章 开始(Getting Started)   第三章 函数的增长率(Growth of Functions)   第四章 递归(Recurrences)   第五章 概率分析与随机化算法(Probabilistic Analysis and Randomized Algorithms)   第二部分(Part II) 排序与顺序统计(Sorting and Order Statistics)   第六章 堆排序(Heapsort)   第七章 快速排序(Quicksort)   第八章 线性时间的排序(Sorting in Linear Time)   第九章 值与顺序统计(Medians and Order Statistics)   第三部分(Part III) 数据结构(Data Structures)   第十章 基本的数据结构(Elementary Data Structures)   第十一章 散列表(Hash Tables)   第十二章 二叉查找树(Binary Search Trees)   第十三章 红-黑树(Red-Black Trees)   第十四章 扩充的数据结构(Augmenting Data Structures)   第四部分(Part IV) 高级的设计与分析技术(Advanced Design and Analysis Techniques)   第十五章 动态规划(Dynamic Programming)   第十六章 贪婪算法(Greedy Algorithms)   第十七章 分摊分析(Amortized Analysis)   第五部分(Part V) 高级的数据结构(Advanced Data Structures)   第十八章 B-树(B-Trees)   第十九章 二项式堆(Binomial Heaps)   第二十章 斐波纳契堆(Fibonacci Heaps)   第二十一章 不相交集的数据结构(Data Structures for Disjoint Sets)   第六部分(Part VI) 图算法(Graph Algorithms)   第二十二章 基本的图算法(Elementary Graph Algorithms)   第二十三章 最小生成树(Minimum Spanning Trees)   第二十四章 单源最短路径(Single-Source Shortest Paths)   第二十五章 全对的最短路径(All-Pairs Shortest Paths)   第二十六章 最大流(Maximum Flow)   第七部分(Part VII) 精选的主题(Selected Topics)   第二十七章 排序网络(Sorting Networks)   第二十八章 矩阵运算(Matrix Operations)   第二十九章 线性规划(Linear Programming)   第三十章 多项式与快速傅里叶变换(Polynomials and the FFT)   第三十一章 数论算法(Number-Theoretic Algorithms)   第三十二章 字符串匹配(String Matching) ......................................................

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值