Featured image of post 剑指 Offer 33. 二叉搜索树的后序遍历序列

剑指 Offer 33. 二叉搜索树的后序遍历序列

题目描述

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

参考以下这颗二叉搜索树:

     5
    / \
   2   6
  / \
 1   3

示例 1:

  • 输入: [1,6,3,2,5]
  • 输出: false

示例 2:

  • 输入: [1,3,2,6,5]
  • 输出: true

提示:

  1. 数组长度 <= 1000

解法一:递归

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
func verifyPostorder(postorder []int) bool {
    n := len(postorder) - 1
    if n <= 0 {
        return true
    }
    j := 0
    for postorder[j] < postorder[n] {
        j++
    }
    cp := j
    for postorder[j] > postorder[n] {
        j++
    }

    return j == n && verifyPostorder(postorder[:cp]) && verifyPostorder(postorder[cp:n])
}
Licensed under CC BY-NC-SA 4.0
最后更新于 2023/06/20 17:58:26
comments powered by Disqus
Built with Hugo
主题 StackJimmy 设计