剑指offer:二叉搜索树的后序遍历序列
admin
2023-07-08 05:02:50
0

题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

class Solution:
    """
    一个二叉搜索树BST满足: max(左子树) < 根节点 < min(右子树)
    由于题目给出的是一个后序遍历,那么序列的最后一个元素就应该是根节点。
    因此我们从BST的定义出发,遍历整个序列,找到第一个大于根节点的元素k,k以前的元素属于左子树,
    从k开始到根节点之前的元素属于右子树。
    如果遍历整个序列之后得到的左右子树都满足BST的定义,则递归判断左子树和右子树是否满足BST定义
    """
    def VerifySquenceOfBST(self, sequence):
        if not sequence:
            return False

        root = sequence[-1]  # 获取根节点
        """
        查找第一个大于根节点的元素,得到左右子树的分界点
        """
        idx = 0
        while idx < len(sequence) - 1:
            if sequence[idx] > root:
                break
            idx += 1

        # 需要验证右子树是否满足BST,即所有右子树的节点都大于根节点,
        # 如果不满足则这个序列不是BST的后序遍历
        for i in range(idx, len(sequence) - 1):
            if sequence[i] < root:
                return False

        # 如果这个序列是BST的后序遍历,那么递归判断左右子树是否分别满足BST
        left = True
        if idx > 0:
            left = self.VerifySquenceOfBST(sequence[: idx])

        right = True
        if idx < len(sequence) - 1:
            right = self.VerifySquenceOfBST(sequence[idx: -1])

        return left and right

相关内容

热门资讯

我国科学家为细胞信号“导航”开... 新华社济南5月31日电(记者张力元)人体细胞犹如一座精密的通信城市,每天都有大量“指令”穿梭传递,调...
极端大风突袭哈尔滨!过山车停摆... 极目新闻记者 詹钘5月31日,受强对流天气影响,哈尔滨国际会展中心体育场相关设施受到损坏,原计划当晚...
三原电缆取得电缆接头连接用防护... 国家知识产权局信息显示,上海三原电缆附件有限公司取得一项名为“一种电缆接头连接用防护结构”的专利,授...
原创 识... 还是那句话,机圈苦大屏久已…… 虽然大屏有大屏的美,但是小屏也有小屏的俏。在大屏旗舰占据主流的手机市...
玄戒技术取得分频电路专利,实现... 国家知识产权局信息显示,北京玄戒技术有限公司取得一项名为“分频电路、分频器、射频芯片和电子设备”的专...
为什么今年香会基调明显变了 5月29日—31日在新加坡举行的第23届香格里拉对话会(简称“香会”),见证着元首引领下大国关系继续...
成本几毛钱、假驱蚊液香精兑水,... 入夏升温,蚊虫进入活跃期,驱蚊防护成为民生刚需,《财经调查》持续接到消费者投诉,他们买到的多款网红驱...
越来越多80后90后,正在丧失... 六一儿童节到来之际,朋友圈里开始出现一种熟悉的热闹。有人晒出零食礼包,有人半开玩笑地向伴侣讨礼物,还...
洋保电子取得用于低温环境的电气... 国家知识产权局信息显示,洋保电子(太仓)有限公司取得一项名为“一种用于低温环境的电气柜”的专利,授权...
中日韩飞手争霸宁波!2026无... 潮新闻客户端 记者 陈冲 通讯员 朱凝 5月31日,2026小遛·无人机竞速世界杯(中国·宁波鄞州站...