剑指offer--面试题24: 二叉搜索树的后序遍历序列
来源:互联网 发布:网络工程和网络布线 编辑:程序博客网 时间:2024/06/06 03:02
题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
python实现:
# -*- coding:utf-8 -*-class Solution: def VerifySquenceOfBST1(self, sequence): # write code here #二叉搜索树的特性 n = len(sequence) if n==0: return False if n==1: return True if sequence[0]>sequence[-1]:#没有左子树 for i in range(1, n-1): if sequence[i]<sequence[-1]: return False return self.VerifySquenceOfBST(sequence[:-1]) rightStart = n-1 for i in range(1, n-1): if sequence[i]>sequence[-1]: rightStart = i else: if rightStart<n-1: return False if rightStart==n-1:#没有右子树 return self.VerifySquenceOfBST(sequence[:-1]) else: return self.VerifySquenceOfBST(sequence[:rightStart]) and self.VerifySquenceOfBST(sequence[rightStart:-1])
#写法2: def VerifySquenceOfBST(self, sequence): n = len(sequence) if n==0: return False if n==1: return True root = sequence[-1] leftEnd = -2 rightStart = n-1 for i in range(n-1): if sequence[i]>root: if rightStart==n-1: rightStart = i leftEnd = i-1 else: if leftEnd!=-2: return False left = True if leftEnd>=0:#有左子树 left = self.VerifySquenceOfBST(sequence[:leftEnd+1]) right = True if rightStart<n-1:#有右子树 right = self.VerifySquenceOfBST(sequence[rightStart:-1]) return left and right
c++实现:
class Solution {public: bool VerifySquenceOfBST(vector<int> sequence) { return verify(sequence, 0, sequence.size()-1); } bool verify(vector<int> &sequence, int start, int end){ if((end-start+1)==0) return false; int root=sequence[end]; int leftEnd=start-2, rightStart=end; for(int i=start;i<end;i++){ if(sequence[i]<root){ if(leftEnd!=start-2)//已经找到左子树终点,现在又遇到比跟小的数 return false; }else{ if(rightStart==end){//还没找到右子树 rightStart = i; leftEnd=i-1;//rightStart=0时leftEnd=-1,这也是为什么leftEnd初始化为2的原因 } } } bool left=true; if(leftEnd>=start)//有左子树 left = verify(sequence, start, leftEnd); bool right=true; if(rightStart<end)//有右子树 right = verify(sequence, rightStart, end-1); return (left && right); }};
0 0
- [剑指offer][面试题24]二叉搜索树的后序遍历序列
- 【剑指offer】面试题24:二叉搜索树的后序遍历序列
- 剑指Offer:面试题24 二叉搜索树的后序遍历序列
- 《剑指Offer》面试题24:二叉搜索树的后序遍历序列
- 剑指offer 面试题24—二叉搜索树的后序遍历序列
- 剑指offer--面试题24:二叉搜索树的后序遍历序列--Java实现
- 【剑指Offer学习】【面试题24:二叉搜索树的后序遍历序列】
- 剑指Offer面试题24(Java版):二叉搜索树的后序遍历序列
- 剑指offer面试题24-二叉搜索树的后序遍历序列
- 剑指offer-面试题24:二叉搜索树的后序遍历序列
- 剑指offer之面试题24:二叉搜索树的后序遍历序列
- 剑指Offer----面试题24:二叉搜索树的后序遍历序列
- 剑指offer-面试题24:二叉搜索树的后序遍历序列
- 剑指offer面试题24:二叉搜索树的后序遍历序列
- 剑指offer面试题24:二叉搜索树的后序遍历序列
- 剑指offer--面试题24: 二叉搜索树的后序遍历序列
- 剑指offer——面试题24:二叉搜索树的后序遍历序列
- 剑指Offer之面试题24:二叉搜索树的后序遍历序列
- setting up a new remote git repository
- 表一对一关联([尚硅谷]_张晓飞_Mybatis 学习笔记三)
- Android应用间数据传递:ContentProvider
- 表一对多关联([尚硅谷]_张晓飞_Mybatis 学习笔记四)
- 单片机==独立按键+数码管计数+扫描法(8)
- 剑指offer--面试题24: 二叉搜索树的后序遍历序列
- curl命令
- 条件筛选([尚硅谷]_张晓飞_Mybatis 学习笔记五)
- 一、二级缓存([尚硅谷]_张晓飞_Mybatis 学习笔记六)
- [尚硅谷例题]_pl_sql
- 表达式求值
- jquery跨域办法
- solr测试项目(下)--索引数据与查询
- <pre>标签学习