- 浏览: 144446 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
Jonathan樊:
请LZ不要简单的Copy过来,好吧?起码编辑一下啊~~该加的超 ...
直接拿来用!最火的Android开源项目 -
tao71535:
学习了、
不过为还是觉得看视频做例子、
比较好、、
Intent总结
题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。 例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:
8
/ \
6 10
/ \ / \
5 7 9 11
因此返回true。
如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回false。
分析:这是一道trilogy的笔试题,主要考查对二元查找树的理解。
在后续遍历得到的序列中,最后一个元素为树的根结点。从头开始扫描这个序列,比根结点小的元素都应该位于序列的左半部分;从第一个大于跟结点开始到跟结点前面的一个元素为止,所有元素都应该大于跟结点,因为这部分元素对应的是树的右子树。根据这样的划分,把序列划分为左右两部分,我们递归地确认序列的左、右两部分是不是都是二元查找树。
参考代码:
8
/ \
6 10
/ \ / \
5 7 9 11
因此返回true。
如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回false。
分析:这是一道trilogy的笔试题,主要考查对二元查找树的理解。
在后续遍历得到的序列中,最后一个元素为树的根结点。从头开始扫描这个序列,比根结点小的元素都应该位于序列的左半部分;从第一个大于跟结点开始到跟结点前面的一个元素为止,所有元素都应该大于跟结点,因为这部分元素对应的是树的右子树。根据这样的划分,把序列划分为左右两部分,我们递归地确认序列的左、右两部分是不是都是二元查找树。
参考代码:
using namespace std; /////////////////////////////////////////////////////////////////////// // Verify whether a squence of integers are the post order traversal // of a binary search tree (BST) // Input: squence - the squence of integers // length - the length of squence // Return: return ture if the squence is traversal result of a BST, // otherwise, return false /////////////////////////////////////////////////////////////////////// bool verifySquenceOfBST(int squence[], int length) { if(squence == NULL || length <= 0) return false; // root of a BST is at the end of post order traversal squence int root = squence[length - 1]; // the nodes in left sub-tree are less than the root int i = 0; for(; i < length - 1; ++ i) { if(squence > root) break; } // the nodes in the right sub-tree are greater than the root int j = i; for(; j < length - 1; ++ j) { if(squence[j] < root) return false; } // verify whether the left sub-tree is a BST bool left = true; if(i > 0) left = verifySquenceOfBST(squence, i); // verify whether the right sub-tree is a BST bool right = true; if(i < length - 1) right = verifySquenceOfBST(squence + i, length - i - 1); return (left && right);
发表评论
-
微软等数据结构+算法面试100题
2011-02-23 17:48 1947微软等100题系列V0.1版终于结束了。 从2010年10月 ... -
百度11月4日网上笔试题及答案
2010-10-27 22:27 1233编程: 用C语言实现一个revert函数,它的功能是将输入的字 ... -
程序员面试题精选(18)-用两个栈实现队列
2009-08-15 12:01 1914题目:某队列的声明如 ... -
程序员面试题精选(17)-把字符串转换成整数
2009-08-15 12:00 2398题目:输入一个表示整数的字符串,把该字符串转换成整数并输出。例 ... -
程序员面试题精选(16)-O(logn)求Fibonacci数列
2009-08-15 11:59 2623题目:定义Fibonacci数列如下: / ... -
程序员面试题精选(15)-含有指针成员的类的拷贝
2009-08-15 11:57 1493题目:下面是一个数组 ... -
程序员面试题精选(14)-圆圈中最后剩下的数字
2009-08-15 11:55 2323题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始 ... -
程序员面试题精选(13)-第一个只出现一次的字符
2009-08-15 11:52 1740题目:在一个字符串中找到第一个只出现一次的字符。如输入abac ... -
程序员面试题精选(12)-从上往下遍历二元树
2009-08-15 11:49 1202题目:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按 ... -
程序员面试题精选(11)-求二元查找树的镜像
2009-08-15 11:43 1221题目:输入一颗二元查 ... -
程序员面试题精选(10)-在排序数组中查找和为给定值的两个数字
2009-08-15 11:40 1934题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两 ... -
程序员面试题精选(09)-查找链表中倒数第k个结点
2009-08-15 11:30 1737题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数 ... -
程序员面试题精选(08)-求1+2+...+n
2009-08-08 21:18 2658题目:求1+2+…+n,要求 ... -
程序员面试题精选(07)-翻转句子中单词的顺序
2009-08-08 21:17 1920题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺 ... -
程序员面试题精选(05)-查找最小的k个元素
2009-08-08 21:14 1747题目:输入n个整数,输出其中最小的k个。 例如输入1,2,3, ... -
程序员面试题精选(04)-在二元树中找出和为某一值的所有路径
2009-08-08 21:12 1301题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到 ... -
程序员面试题精选(03)-求子数组的最大和
2009-08-08 21:10 1913题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个 ... -
程序员面试题精选(02)-设计包含min函数的栈
2009-08-08 21:08 1820题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最 ... -
程序员面试题精选(01)-把二元查找树转变成排序的双向链表
2009-08-08 20:58 1939题目:输入一棵二元查 ...
相关推荐
递归遍历分为前序遍历、中序遍历和后序遍历,本题使用的是中序遍历,因为中序遍历的结果正好是按照节点值排序的序列。 4. 指针操作: 在C/C++等语言中,指针是核心概念之一,涉及到内存地址的操作。在将二元查找树...
中序遍历是二元查找树的一种遍历策略,通常用于打印或显示树的有序序列。对于非空树,中序遍历的顺序是:首先遍历左子树,然后访问根节点,最后遍历右子树。 3. **双向链表(Doubly Linked List)** 双向链表是一...
6. **判断序列是否为二元查找树后序遍历**:检查一个整数序列是否为二元查找树的后序遍历结果。二元查找树的后序遍历特点是左子树-右子树-根节点,需要考虑递归关系。 7. **翻转单词顺序**:在句子中翻转单词的顺序...
在程序员面试中,经常会遇到与数据结构和算法相关的题目,特别是与树相关的题目,例如将二元查找树转换成排序的双向链表。这个问题主要考察的是对二元查找树特性的理解以及递归或迭代算法的运用。 二元查找树...
这里我们重点讨论的是如何将一个二元查找树(Binary Search Tree, BST)转换成一个排序的双向链表,这是一个典型的面试题,考察了对数据结构的理解和递归算法的应用。 二元查找树是一种特殊的二叉树,每个节点的值...
中序遍历二元查找树的顺序是:左子树 -> 节点 -> 右子树,对于排序树来说,中序遍历的结果是一个升序序列。 6. 结构体(Struct): 在C/C++中,结构体用于封装多个不同类型的数据,如BSTreeNode结构体封装了节点...
- 二元查找树的中序遍历结果是升序序列。 - 由于二元查找树具有上述性质,因此非常适合用来实现有序集合或符号表等数据结构。 - **应用:** - 数据库索引构建。 - 文件系统的目录结构管理。 - 缓存机制中的键值...
- 中序遍历二元查找树会得到一个有序序列,因为这是二元查找树的性质。 - 每遍历到一个节点,就将其添加到当前已形成的链表尾部。 4. **递归实现**: 在这两种策略中,递归是关键。对于思路一,递归调用`...
【程序员面试题精选100题】是一份中文Word文档,包含了针对程序员的100道面试题目,这些题目详细解答了如何准备编程面试,尤其是技术面试环节。面试是求职过程中至关重要的一环,它能让雇主直接评估应聘者的技能和...
在程序员面试中,掌握各种算法和数据结构是至关重要的,尤其是对于二元查找树(BST)的处理。本题目的核心是将一棵二元查找树转化为一个排序的双向链表,而无需创建新的节点,仅通过调整节点间的指针实现。这种转换...
对于二元查找树,中序遍历的结果是一个升序序列。因此,我们可以遍历整棵树,每次访问一个节点时,将其添加到已排序的链表尾部,这样遍历结束后,整个树就变成了一个有序链表。 6. **代码实现** 在提供的代码中,`...
9. **判断整数序列是否为二元查找树的后序遍历结果**: 判断给定序列是否符合二叉查找树后序遍历的特点,通常后序遍历的顺序是左子树-右子树-根节点,可以用递归或栈来检查这个顺序。 以上就是这些算法面试题的...
8. 判断整数序列是否为二元查找树的后序遍历结果: 这个问题考察了对于二元查找树遍历的理解,需要根据后序遍历的特性来重构树并验证序列。 9. 查找最小的K个元素: 使用最大堆可以有效地找到最小的K个元素。堆是...
8. 判断整数序列是否是二元查找树的后序遍历结果:二元查找树的后序遍历结果有其特性,根据这些特性可以递归或迭代地验证给定序列是否符合。 9. 查找最小的K个元素:利用最大堆的数据结构可以高效地找出一组数中的...
二元查找树的中序遍历顺序会得到一个升序序列,因此我们可以采用中序遍历的方式,依次将遍历到的节点加入到已有的链表中,形成一个排序的双向链表。 **参考代码**(思路一): ```cpp struct BSTreeNode { int m_...
在《2011年程序员面试试题宝典100题》中,有一道经典的算法题:“把二元查找树转变成排序的双向链表”。这道题目考察了程序员对数据结构和算法的理解深度,尤其是对于树形结构与链表之间的转换能力。 #### 题目解析...