剑指offer:二叉搜索树的后序遍历序列
来源:互联网 发布:xp访问win7无任何网络 编辑:程序博客网 时间:2024/05/06 03:56
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果,假设输入的任意两个数不同。
方法:后序遍历的序列中,最后一个数字是树的根节点的值,数组中前面可以分为两部分:一部分是比根节点小的序列,这是树的左子树;一部分是比根节点大的序列,这是树的右子树。然后分别对左子树和右子树做同样的操作。
// BST:Binary Search Tree,二叉搜索树bool VerifySquenceOfBST(int *sequence, int length){ if(sequence == NULL || length <= 0) return false; int root = sequence[length - 1]; //取根节点的值 // 在二叉搜索树中左子树的结点小于根结点 int i = 0; for(; i < length - 1; ++ i) { if(sequence[i] > root) break; } // 在二叉搜索树中右子树的结点大于根结点 int j = i; for(; j < length - 1; ++ j) { if(sequence[j] < root) return false; } // 判断左子树是不是二叉搜索树 bool left = true; if(i > 0) left = VerifySquenceOfBST(sequence, i); // 判断右子树是不是二叉搜索树 bool right = true; if(i < length - 1) right = VerifySquenceOfBST(sequence + i, length - i - 1); return (left && right);}
PS:如果处理一个二叉树的遍历序列,我们可以先找到二叉树的根节点,再基于根节点把整棵树的遍历序列拆分成左子树对应的序列和右子树对应的序列,接下来递归地处理这两个子序列。
0 0
- 剑指offer:二叉搜索树的后序遍历序列
- 【剑指offer】二叉搜索树的后序遍历序列
- 剑指offer--二叉搜索树的后序遍历序列
- 剑指Offer-->二叉搜索树的后序遍历序列
- 《剑指offer》二叉搜索树的后序遍历序列
- 【剑指Offer】二叉搜索树的后序遍历序列
- 剑指offer--二叉搜索树的后序遍历序列
- 剑指 offer:二叉搜索树的后序遍历序列
- 剑指offer:二叉搜索树的后序遍历序列
- 【剑指offer】二叉搜索树的后序遍历序列
- 二叉搜索树的后序遍历序列||剑指offer
- 剑指offer-二叉搜索树的后序遍历序列
- 剑指offer 二叉搜索树的后序遍历序列
- 剑指offer 二叉搜索树的后序遍历序列
- 剑指offer:二叉搜索树的后序遍历序列
- [剑指offer]二叉搜索树的后序遍历序列
- 《剑指offer》-二叉搜索树的后序遍历序列
- 【剑指offer】二叉搜索树的后序遍历序列
- Linux用户及用户组管理命令
- 剑指offer:二叉树中和为某一值的路径
- myeclipse利用xfire 组件进行web service
- mybatis typeHandler自定义类型转换器
- 编程小技巧+快捷键--传智播客OA视频
- 剑指offer:二叉搜索树的后序遍历序列
- ORA-27125: unable to create shared memory segment Linux-x86_64 Error: 1: Operation not permitted
- 而后你也消失不见了
- 观察者模式
- 作为一名计算机学院普通的大学生如何提高兴趣敲代码?谈谈我的感受,欢迎交流
- 程序员学习能力提升三要素(时刻提醒自己)
- iOS 开发者计划申请 2014 年最新总结
- word2010中,插入-符号-公式显示是灰色的解决办法
- hdu 4586 Play the Dice(数论)