今天开始讲和大家坚持打卡面试非常重要算法练习---剑指offer,希望我们能一起肝。
1 题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
2 思路----c++
后序遍历中,最后一个数字是整棵树的根节点
数组中前面数字分为两部分
一部分是左子树节点的值,都比根节点小
一部分是右子树节点的值,都比根节点值打
3 代码实现
c++版本
//数组分为两部分,左边小于根节点 右边大于根节点
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
int size= sequence.size();
if(0==size){
return false;
}
int i=0;
while(--size){
while(sequence[i++] while(sequence[i++]>sequence[size]);
if(i return false;
}
i=0;
}
return true;
}
};
java版本
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence.length == 0){
return false;
}
if(sequence.length == 1){
return true;
}
return judge(sequence,0,sequence.length-1);
}
public boolean judge(int[] a,int start,int end){
if(start >= end){
return true;
}
int i = start;
while(a[i] ++i;
}
for(int j=i;j if(a[j] return false;
}
}
return judge(a,start,i-1) && judge(a,i,end-1);
}
}
python版本
class Solution:
def VerifySquenceOfBST(self, sequence):
# write code here
if sequence==None or len(sequence)==0:
return False
length=len(sequence)
root=sequence[length-1]#最后节点的值
# 在二叉搜索 树中 左子树节点小于根节点 走完左
for i in range(length):
if sequence[i]>root:
break
# 二叉搜索树中右子树的节点都大于根节点 再判断区间(i.length]
for j in range(i,length):
if sequence[j] return False
# 判断左子树是否为二叉树
left=True
if i>0:
left=self.VerifySquenceOfBST(sequence[0:i])
# 判断 右子树是否为二叉树
right=True
if i-1:
right=self.VerifySquenceOfBST(sequence[i:-1])return left and right
4 唠嗑
[剑指offer]20二叉树的镜像[剑指offer]19连续子数组最大和[剑指offer]2替换空格[剑指offer]3从尾到头打印链表[剑指offer]4栈实现队列[剑指offer]5斐波那契数列[剑指offer]6跳台阶[剑指offer]8二进制中1的个数炸裂!万字长文拿下HTTP2020年7月27日打卡,打卡格式"打卡XX天"。暖蓝汇聚大家一起,探讨简历修改,面试经历分享,尽全力让大家能在2020找到理想的工作。如果你想加入,加我拉你进面试交流群。