最强解析面试题:二叉搜索树的后序遍历序列
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)
}
附录
忙碌
以上是关于最强解析面试题:二叉搜索树的后序遍历序列的主要内容,如果未能解决你的问题,请参考以下文章
剑指OFFER----面试题33. 二叉搜索树的后序遍历序列