剑指offer(23)—二叉搜索树的后序遍历序列

来源:互联网 发布:ssh建立连接的端口号 编辑:程序博客网 时间:2024/06/05 12:49

二叉搜索树的后序遍历序列

题目描述

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

思路

二叉搜索树:左<根<右
首先数组的最后一个元素为树的根节点,从前向后一次找最后一个小于根节点的元素即为左子树的根节点,从而可以确定左子树的后序遍历序列,再继续遍历,若遇到小于根节点的值则返回false,否则递归判断左右子树

代码

class Solution {public:    bool VerifySquenceOfBST(vector<int> sequence, int begin, int end){        int root = sequence[end];        int left = begin;        while(left < end){  //找到连续大于root的最后一个元素位置left            if(sequence[left] > root)                break;            left++;        }        int right = left;        while(right < end){ //若left~end之间有小于root,则返回false            if(sequence[right] < root)                return false;            right++;        }        bool l = true;        if(left-1 > begin)  //左子树存在则判断左子树            l = VerifySquenceOfBST(sequence, begin, left-1);        bool r = true;        if(left < end-1)    //右子树存在则判断右子树            r = VerifySquenceOfBST(sequence, left, end-1);        return (l && r);    }    bool VerifySquenceOfBST(vector<int> sequence) {        int nLength = sequence.size();        if(nLength <= 0)            return false;        return VerifySquenceOfBST(sequence, 0, nLength-1);    }};
阅读全文
0 0
原创粉丝点击