剑指offer 24:二叉搜索树的后序遍历序列
Posted fancy-li
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer 24:二叉搜索树的后序遍历序列相关的知识,希望对你有一定的参考价值。
题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
解题思路
后序遍历,顾名思义根节点位于尾部,故可将一个序列分为左子树序列、右子树序列和根节点,对于两个子序列又可分别验证是否是二搜索叉树的后序序列,即此问题是一个递归问题。递归的出口是系列中仅包含一个元素。
C++代码实现
class Solution public: bool VerifySquenceOfBST(vector<int> sequence) int size = sequence.size(); if(size ==0) return false; return VerifyPostOfBST( sequence,0,size-1); bool VerifyPostOfBST(vector<int> sequence,int start,int end) if(start==end) return true; int root=sequence[end]; int mid=end; for(int i=start ; i<end ; i++) if(sequence[i]>=sequence[end]) mid=i; break; bool curr=true; //根节点没有左子树或右子树的情况 bool v1=true,v2=true; if(mid==start) for(int i= mid; i<end;i++) curr = curr && sequence[i]>=sequence[end]; v2=VerifyPostOfBST(sequence,mid,end-1); else if(mid==end) for(int i= start; i<mid;i++) curr = curr && sequence[i]<=sequence[end]; v1=VerifyPostOfBST(sequence,start,mid-1); else for(int i= mid; i<end;i++) curr = curr && sequence[i]>=sequence[end]; for(int i= start; i<mid;i++) curr = curr && sequence[i]<=sequence[end]; v1=VerifyPostOfBST(sequence,start,mid-1); v2=VerifyPostOfBST(sequence,mid,end-1); return v1 && v2 && curr; ;
以上是关于剑指offer 24:二叉搜索树的后序遍历序列的主要内容,如果未能解决你的问题,请参考以下文章