每天一道算法题5 判断整数序列是不是二元查找树的后序遍历结果
来源:互联网 发布:网络排名优化软件 编辑:程序博客网 时间:2024/06/05 12:47
例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:
8
/ \
6 10
/ \ / \
5 7 9 11
因此返回true。
如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回false。
分析:这是一道trilogy的笔试题,主要考查对二元查找树的理解。
在后续遍历得到的序列中,最后一个元素为树的根结点。从头开始扫描这个序 列,比根结点小的元素都应该位于序列的左半部分;从第一个大于跟结点开始到跟结点前面的一个元素为止,所有元素都应该大于跟结点,因为这部分元素对应的是 树的右子树。根据这样的划分,把序列划分为左右两部分,我们递归地确认序列的左、右两部分是不是都是二元查找树。
参考代码:
usingnamespace 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)
returnfalse;
// 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[i] > 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)
returnfalse;
}
// 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);
}
- 每天一道算法题5 判断整数序列是不是二元查找树的后序遍历结果
- 每日一道算法题6——判断整数序列是不是二元查找树的后序遍历结果
- 算法题11 判断整数序列是不是二元查找树的后序遍历结果
- 算法讨论(五)--判断整数序列是不是二元查找树的后序遍历结果
- 算法-判断整数序列是不是二元查找树的后序遍历结果
- 【算法】判断整数序列是不是二元查找树的后序遍历结果
- 算法习题9:判断整数序列是不是二元查找树的后序遍历结果
- 算法—判断整数序列是不是二元查找树的后序遍历结果
- 微软算法100道题-----判断整数序列是不是二元查找树的后序遍历结果
- 第9 题 判断整数序列是不是二元查找树的后序遍历结果
- 面试100题:9.判断整数序列是不是二元查找树的后序遍历结果
- 面试100题:9.判断整数序列是不是二元查找树的后序遍历结果
- 第九题(判断整数序列是不是二元查找树的后序遍历结果)
- 第9题:判断整数序列是不是二元查找树的后序遍历结果
- 9.判断整数序列是不是二元查找树的后序遍历结果(树)
- 判断整数序列是不是二元查找树的后序遍历结果
- 判断整数序列是不是二元查找树的后序遍历结果
- 判断整数序列是不是二元查找树的后序遍历结果
- linux中关于权限
- C# .NET打包发布
- 思想决定行为;行为决定习惯;习惯决定性格;性格决定命运
- 生产者消费者完整代码
- Mysql事务与锁的好文章记录
- 每天一道算法题5 判断整数序列是不是二元查找树的后序遍历结果
- 获取md5的高效的方法
- SQL Server 在RAID 10 vs. RAID 5性能
- 2000 动态 行列转换
- jQuery Moblie 页面模版(基础)
- 每天一道算法题6 求1+2+...+n
- UIApplication sharedApplication详细解释-IOS
- 使用反射检查和实例化泛型类型
- 每天一道算法题7 查找链表中倒数第k个结点