Interview----判断整数序列是否是二叉搜索树的后序遍历结果
2024-09-16 22:47:24
题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。
如果是返回true,否则返回false。
例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:
8
/ \
6 10
/ \ / \
5 7 9 11
因此返回true。
如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回 false。
思路:
抓住二叉搜索树的两个重要的性质:
1. 左子树所有节点的值 <= 当前节点 <= 右子树的所有节点的值
2. 左右子树都是一棵搜索树
关于二叉搜索树的详细分析可参考: http://blog.csdn.net/shoulinjun/article/details/18449445
性质 1 对应于后序遍历就是: 后序遍历左边第一段的值 <= root <= 第二段的值。 root 就是最后一个节点。
性质 2 通过递归调用即可。
bool IsBST(vector<int>::iterator begin, vector<int>::iterator end)
{
if (end - begin < 3)
return true; //左子树 小于当前节点,小于右子树
vector<int>::iterator left_end = begin;
for(; *left_end <= *(end-1); ++ left_end); //use root as sentinel
for(vector<int>::iterator it = left_end+1; it != end; ++it)
if (*it < *(end-1))
return false; //left tree is a BST, and right tree as well
if (IsBST(begin, left_end) && IsBST(left_end, end-1))
return true;
else
return false;
}
最新文章
- Unmanaged Exports使用方法
- CCNA网络工程师学习进程(3)常规网络设计模型与基本的网络协议
- Open Live Writer的配置
- 客户端(Winform窗体)上传文件到服务器(web窗体)简单例子
- 第二章 rabbitmq在mac上的安装
- thinkphp 防止sql注入
- sdk 命令行
- VC中判断指定窗口是否被其他窗口遮挡
- Flask web开发 处理POST请求(登录案例)
- PLSQL_监控有些SQL的执行次数和频率
- DZY Loves Partition
- 概率检索模型及BM25
- Android开发之监听器
- k8s 如何 Failover?- 每天5分钟玩转 Docker 容器技术(127)
- java基础知识文章汇总
- libcurl库的http get和http post使用【转】
- consul Consul vs. ZooKeeper, doozerd, etcd
- Lisp分配给保护的符号…
- 网站的PV UV IP---网站常见软件性能
- a、button、input点击获取焦点时出现蓝色边框,如何去掉