题目:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。
leetcode原题
思路:
二叉搜索树:
- 空树
- 左子树(上的所有节点)比根节点小,右子树(的所有节点)比根节点大
- 中序遍历是递增序列
- 前序遍历:根左右
- 中序遍历:左根右
- 后序遍历:左右根
输入的数组是【二叉树的后序遍历】,所以,数组最后一个元素是 整棵二叉树的根节点
代码:
class Solution:
def verifyPostorder(self, postorder: List[int]) -> bool:
if postorder == []:
return True
root=postorder[-1]#根节点
l=len(postorder)-1
while(l):
i=0
while(postorder[i]<postorder[l]):#左子树小于根节点
i+=1
while(postorder[i]>postorder[l]):#右子树大于根节点
i+=1
if i<l:
return False
l-=1
return True
待优化,时间复杂度:O(n^2)