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


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

    【思路】注意题目给出的是二叉搜索树,那么它就有一个很重要的性质:左孩子值<=根的值<=右孩子的值!但题目中说明了任意两个数字都互不相同,说明没有重复数字。

    由于给出的是后序遍历,我们就可以知道最后一个数为根节点,并且其左子树的值均小于根节点的值,右子树的值均大于根节点的值。因此我们可以从头遍历,直到找到第一个大于根节点的值,我们就可以得到左右子树划分的边界,其后面所有值都应该大于根节点的值,最后利用分治思想进行递归即可!

    class Solution {
    public:
        bool process(vector<int> seq, int start, int end){
            if(seq.size() == 0) return false;
            int i;   // 左子树的索引
            if (start >= end){
                return true;
            }
            for(i = 0;i < end; i++){
                if(seq[i] > seq[end]){
                    break;
                }
            }
            for(int j = i;j < end; j++){ // j 为右子树的索引
                if(seq[j] < seq[end]){
                    return false;
                }
            }
    
            return process(seq, start, i-1) && process(seq, i, end-1);
        }
    
        bool VerifySquenceOfBST(vector<int> sequence) {
            if (sequence.size() == 0)  return false;
            if (sequence.size() == 1)  return true;
            return process(sequence, 0, sequence.size());
        }
    };
  • 相关阅读:
    CSS3 box-shadow(阴影使用)
    缩小窗口时CSS背景图出现右侧空白BUG的解决方法
    html打开个人QQ聊天页面
    帮助你实现元素动画的6款插件
    给出两个颜色,计算中间颜色返回数组
    名字首字母
    自适应网页设计
    tab切换jquery代码
    改变上传文件样式
    剑指offer 面试16题
  • 原文地址:https://www.cnblogs.com/zhudingtop/p/11337938.html
Copyright © 2020-2023  润新知