zoukankan      html  css  js  c++  java
  • 剑指 Offer 33. 二叉搜索树的后序遍历序列

    根据二叉搜索树的定义,可以通过递归,判断所有子树的正确性 (即其后序遍历是否满足二叉搜索树的定义) ,若所有子树都正确,则此序列为二叉搜索树的后序遍历。

    终止条件: 当 (l geq r) ,说明此子树节点数量小于等于(1),返回 true ;

    划分左右子树: 遍历后序遍历的 ([l, r]) 区间元素,寻找第一个大于根节点值的节点,索引记为 (k) 。此时,可划分出左子树区间 ([l,k-1])、右子树区间 ([k, r - 1])

    判断是否为二叉搜索树:
    左子树区间 ([l, k-1]) 内的所有节点都应小于根节点的值。
    右子树区间 ([k, r-1]) 内的所有节点都应大于根节点的值。

    class Solution {
    public:
        vector<int> post;
        bool verifyPostorder(vector<int>& postorder) {
            post = postorder;
            if (post.empty()) return true;
            return isPostorder(0, post.size() - 1);
        }
    
        bool isPostorder(int l, int r) {
            if (l >= r) return true;
            
            int root = post[r];
            int k = l;
            while (k < r && post[k] < root) k++;
            
            for (int i = k; i < r; i++) {
                if (post[i] < root)
                    return false;
            }
            
            return isPostorder(l, k - 1) && isPostorder(k, r - 1);
        }
    };
    
  • 相关阅读:
    TSQL 错误状态
    CSS光标聚焦改指针为手
    PD使用指导
    Ext 为label添加单击事件
    (转) SQL Server中解决死锁的新方法介绍
    DateTime 的使用技巧
    (转) C# 接口
    常见频率f与周期T之间的关系
    上拉电阻与下拉电阻的作用和区别
    powershell命令返回值
  • 原文地址:https://www.cnblogs.com/fxh0707/p/15059210.html
Copyright © 2011-2022 走看看