判断一个后序遍历是否正确
来源:互联网 发布:红帽linux版本 编辑:程序博客网 时间:2024/06/10 05:28
题目:
一棵二叉查找树,得到一个后序遍历,判断这个后序遍历是否正确。
分析:
方法1,根据中序和后序
根据中序和后序,可以唯一得到一棵二叉树。一棵二叉查找树的中序显然就是所有数字的正常排序,所以,我们首先将所有的后序得到的数字排序,时间复杂度是O(nlogn),然后根据后序和中序遍历,判断二叉树是否可以建立。
总的时间复杂度就是O(nlogn)。
方法2,直接利用查找二叉树的性质
显然,后序遍历的最后一个数字是根节点,然后根据查找二叉树的性质,我们将前面的数字分为两部分,前面一部分都是小于根节点的数字,后面的数字都是大于根节点的数字。然后用递归的方法,判断是否是正确的查找二叉树后序遍历。
代码如下:
#include <iostream>#include <cstdlib>#include <cstdio>using namespace std;bool verifyBST(int *a, int len){if(a == NULL || len < 0)return false;if(len == 0)//如果长度为0,返回正确return true;int i = 0;while(i < len - 1)//找到第一个大于根节点的数字{if(a[i] > a[len - 1])break;i++;}int j = i;while(j < len - 1)//判断右边部分的数字是否都大于根节点{if(a[j] < a[len - 1])return false;j++;}return verifyBST(a, i) && verifyBST(a + i, len - i - 1);//递归调用,判断左边和右边数字是否满足条件}int main(){int a[] = {1,2,4,5,6,3};cout << verifyBST(a, sizeof(a)/sizeof(a[0])) <<endl;return 0;}
总结:
面试中会经常出现二叉树方面的题目,这种题目,要学会挖掘二叉树中的特征,学会用特征进行解题。
- 判断一个后序遍历是否正确
- 判断排序二叉树的后序遍历是否正确(对递归算的总结)
- 判断一个序列是否是一个二叉查找树的后序遍历结果
- 判断一个表达式是否正确
- 判断一个数组是否为二叉树的后序遍历
- 1367判断一个数组是否为二叉排序树的后序遍历结果
- 判断一个数据序列是否是BST后序遍历的结果
- 【2013创新工场电话面试】判断一个数组是否为二叉排序树的后序遍历结果
- 输入一个数列,判断是否为某一个二叉搜索树的后序遍历序列
- 判断一个数组是否是二叉搜索树的后序遍历(java)
- 判断一个数组是否是某个二叉树搜索树的后序遍历
- 《剑指offer》:[24]判断一个序列是否为二叉树的后序遍历序列
- 剑指offer——判断一个序列是否为二叉搜索树的后序遍历
- Java 判断一个序列是否是搜索二叉树的后序遍历结果
- 关于判断某一数组内容是否为一个二叉搜索树的后序遍历结果
- 【面试题】剑指offer24--判断一个序列是否为二叉树的后序遍历
- 判断一个序列是否是一棵二叉树的后序遍历序列(分治算法)
- 如何判断数组序列是否为后序遍历
- 推荐35款精致的 CSS3 和 HTML5 网页模板
- 有的浏览器,如Firefox中mouseup事件失效
- Genesys开发板上跑xilkernel时的硬件设置
- 2012.9.8
- 不要刻意在竞技中运用体悟世界的心态
- 判断一个后序遍历是否正确
- struts+spring+mybatis介绍
- 心醉七夕
- magento记事本
- Ubuntu 环境变量
- java api 帮助文档 chm 1.5 1.6 中文版英文版
- ZOJ 3210 A Stack or A Queue
- java多线程
- JPA使用总结