跟着姚桑学算法-二叉搜索树的后序遍历序列

简介: 剑指offer算法

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

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。

如果是则返回true,否则返回false。

假设输入的数组的任意两个数字都互不相同。

数据范围
数组长度 [0,1000]。

样例

输入:[4, 8, 6, 12, 16, 14, 10]

输出:true

【题解】-- 后序遍历

  1. 本题的核心思想是:在BST中,根结点一定在 数组最末端__,并且可以用根结点在前面的元素中找一个分界点,其 __左边的元素均小于root, 右边的元素均大于root
  2. 步骤是范围定在 0 ~ sq.size() - 1,然后从头开始找 左右子树的分界点k ,k就是右子树的第一个元素的下标。只要左边的元素满足小于root,右边的元素满足大于root,即可。如果否,返回false。
  3. dfs的边界条件是 l, k - 1k, r - 1。之所以是 r - 1是因为r已经是根结点了,并且递归需要不断缩小范围,l是一直不变的,r每次递归都会向左边减1。所以是r - 1

复杂度分析:

二叉树的每个节点只会被遍历一次,所以时间复杂度为O(n)

C++代码实现:

class Solution {
public:
    vector<int> sq;
    bool dfs(int l, int r)
    {
        if(l >= r) return true;
        int k = l;
        while(k < r && sq[k] < sq[r]) k ++;
        for(int i = k; i < r; i ++)
            if(sq[i] < sq[r])
                return false;
        return dfs(l, k - 1) && dfs(k, r - 1);
    }

    bool verifySequenceOfBST(vector<int> sequence) {
        sq = sequence;
        return dfs(0, sq.size() - 1);
    }
};
目录
相关文章
|
14天前
|
存储 算法 Java
Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。
【6月更文挑战第21天】Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。二叉树遍历通过访问根、左、右子节点实现。DFS采用递归遍历图的节点,而BFS利用队列按层次访问。以下是简化的代码片段:[Java代码略]
19 4
|
1天前
|
自然语言处理 算法 搜索推荐
字符串相似度算法完全指南:编辑、令牌与序列三类算法的全面解析与深入分析
在自然语言处理领域,人们经常需要比较字符串,这些字符串可能是单词、句子、段落甚至是整个文档。如何快速判断两个单词或句子是否相似,或者相似度是好还是差。这类似于我们使用手机打错一个词,但手机会建议正确的词来修正它,那么这种如何判断字符串相似度呢?本文将详细介绍这个问题。
139 1
|
2天前
|
存储 算法 搜索推荐
|
18天前
|
算法 Java 索引
【算法】重建二叉树并进行后序遍历的Java实现
【算法】重建二叉树并进行后序遍历的Java实现
19 5
|
16天前
|
机器学习/深度学习 人工智能 算法
【机器学习】Q-Learning算法:在序列决策问题中的实践与探索
【机器学习】Q-Learning算法:在序列决策问题中的实践与探索
22 0
【机器学习】Q-Learning算法:在序列决策问题中的实践与探索
|
18天前
|
存储 算法 Java
广度优先搜索(Breadth-First Search,BFS)是一种用于图的遍历或搜索的算法。
广度优先搜索(Breadth-First Search,BFS)是一种用于图的遍历或搜索的算法。
|
9天前
|
算法 搜索推荐 C++
C++之STL常用算法(遍历、查找、排序、拷贝、替换、算数生成、集合)
C++之STL常用算法(遍历、查找、排序、拷贝、替换、算数生成、集合)
15 0
|
18天前
|
人工智能 算法 Java
深度优先搜索(Depth-First Search,DFS)是一种用于遍历或搜索树或图的算法。
深度优先搜索(Depth-First Search,DFS)是一种用于遍历或搜索树或图的算法。
|
18天前
|
存储 算法
【二叉树】数据结构——BST二叉树基本概念及算法设计(插入、删除、遍历操作)
【二叉树】数据结构——BST二叉树基本概念及算法设计(插入、删除、遍历操作)
|
25天前
|
存储 SQL 算法
LeetCode 题目 94:五种算法递归|迭代|莫里斯|线索二叉树|栈的迭代二叉树 实现中序遍历
LeetCode 题目 94:五种算法递归|迭代|莫里斯|线索二叉树|栈的迭代二叉树 实现中序遍历