二叉搜索树的后序遍历序列(C++)

题目:

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

思路:

1. 搜索二叉树的定义为根节点的左子树都小于根节点,右子树都大于根节点;

2. 因为是后序遍历(左右根)所以根节点即序列中最后一个元素,所以比根节点小的节点即为左子树,之后的即右子树,同时这种性质也适用于其子树中,只要判断所有子树是否都满足二叉搜索树的性质,则可说该序列为二叉搜索树的后序遍历结果。

代码如下:

class Solution {
public:
    bool VerifySquenceOfBST(vector<int> sequence) {
        int len = sequence.size();
        if(len < 1)
            return false;
        int root = sequence[len - 1];
        int i = 0;
        vector<int> left_seq;  // 分别用来存储左子树和右子树
        vector<int> right_seq;
        for(; i < len - 1; i++)
        {
            if(sequence[i] > root)
                break;
            left_seq.push_back(sequence[i]);
        }
        int j = i;
        for(; j < len - 1; j++)  // 判断是否为搜索二叉树,否则直接输出false
        {
            if(sequence[j] < root)
                return false;
            right_seq.push_back(sequence[j]);
        }
        bool left = true;  // 判断左右子树是否为搜索二叉树
        if(i > 0)
            left = VerifySquenceOfBST(left_seq);
        bool right = true;
        if(j < len - 1)
            right = VerifySquenceOfBST(right_seq);
        return (left && right);
    }
};
发布了63 篇原创文章 · 获赞 4 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Jerry_Leo_liu/article/details/105018829