最强解析面试题:二叉搜索树的后序遍历序列

Posted 魏小言

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最强解析面试题:二叉搜索树的后序遍历序列相关的知识,希望对你有一定的参考价值。


最强解析面试题:二叉搜索树的后序遍历序列

文章讲解 “ 二叉搜索树的后序遍历序列 ” 经典面试题,包含思路及源码,及解惑!

题目

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

数据范围: 节点数量 0 \\le n \\le 10000≤n≤1000 ,节点上的值满足 1 \\le val \\le 10^{5}1≤val≤105 ,保证节点上的值各不相同
要求:空间复杂度 O(n)O(n) ,时间时间复杂度 O(n^2)O(n2)

提示:

  • 1.二叉搜索树是指父亲节点大于左孩子节点,但是小于右孩子节点
  • .该题我们约定空树不是二叉搜索树
  • 3.后序遍历是指按照 “左子树-右子树-根节点” 的顺序遍历

示例1

输入:
[3,1,2]
返回值:
false

示例2

输入:
[5,7,6,9,11,10,8]
返回值:
true

思路

1、后序遍历,根节点在最后,且左节点小于根节点,右节点都大于根节点;
2、找到左右节点的分界,依次进行,左/右节点也是一二叉搜索树;

二叉查找树的前中后序遍历是以其根节点位置区分的。
根节点在前,加左右,为前序;
根节点在中,加左右,为中序;
根节点在后,加左右,为后序;
且左,根,右节点大小为 小、中、大 次序;

代码

package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * @param sequence int整型一维数组
 * @return bool布尔型
 */
func VerifySquenceOfBST(sequence []int) bool {
   // write code here
   if len(sequence) < 1 {
      return false
   }
   return Res(sequence, 0, len(sequence)-1)
}
func Res(arr []int, start, end int) bool {
   if start >= end {
      return true
   }
   i := start
   for ; i < end; i++ {
      if arr[i] > arr[end] {
         break
      }
   }
   for j := i; j < end; j++ {
      if arr[j] < arr[end] {
         return false
      }
   }
   return Res(arr, start, i-1) && Res(arr, i, end-1)
}

附录

忙碌

以上是关于最强解析面试题:二叉搜索树的后序遍历序列的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 面试题33. 二叉搜索树的后序遍历序列

剑指OFFER----面试题33. 二叉搜索树的后序遍历序列

《剑指offer》面试题24 二叉搜索树的后序遍历序列 Java版

剑指Offer对答如流系列 - 二叉搜索树的后序遍历序列

面试题:二叉搜索树的后序遍历

二叉搜索树的后序遍历序列(剑指offer-23)