zoukankan      html  css  js  c++  java
  • 剑指offer---2、二叉搜索树的后序遍历序列

    剑指offer---2、二叉搜索树的后序遍历序列

    一、总结

    一句话总结:

    输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
    认真看题:注意题目中是二叉搜索树,二叉搜索树就有二叉搜索树的那些规律

    1、二叉搜索树的后序遍历序列 的解题思路是什么?

    BST的后序序列的合法序列是,对于一个序列S,最后一个元素是x (也就是根),如果去掉最后一个元素的序列为T,那么T满足:T可以分成两段,前一段(左子树)小于x,后一段(右子树)大于x,且这两段(子树)都是合法的后序序列。完美的递归定义 : ) 。

    2、二叉树的问题的注意事项是什么?

    递归:一般是 递归 来做
    增一个函数:一般要重新写一个函数来做递归

    二、内容在总结中

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

    参考代码:java

    class Solution {
        bool judge(vector<int>& a, int l, int r){
            //只有一个元素的时候
            if(l >= r) return true;
            //找右子树
            int i = r;
            while(i > l && a[i - 1] > a[r]) --i;
            //判断左子树
            for(int j = i - 1; j >= l; --j) if(a[j] > a[r]) return false;
            //分别判断左右子树
            return judge(a, l, i - 1) && (judge(a, i, r - 1));
        }
    public:
        bool VerifySquenceOfBST(vector<int> a) {
            if(!a.size()) return false;
            return judge(a, 0, a.size() - 1);
        }
    };
     
  • 相关阅读:
    关于我的新博客
    我今天申请了blog!
    Win XP / Win 7上配置eclipse+CDT+MinGW,和相关问题的解决办法
    Android app Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER
    用adb安装程序,和在电脑和设备之间传文件
    eclipse 断点调试快捷键(转)
    找不到设备,device not found错误
    eclipse里面的C printf 先输出到缓冲区
    Eclipse Outline 图示
    如何获得Android系统版本
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/10999462.html
Copyright © 2011-2022 走看看