检查是否为BST

题目:

请实现一个函数,检查一棵二叉树是否为二叉查找树。
给定树的根结点指针TreeNode* root,请返回一个bool,代表该树是否为二叉查找树

  这个题目还要考虑cur.left.right > cur这种情况 ,所以就不能用下面的思路:
递归,每一层考虑cur是否满足大于左节点并且小于右节点

      2.5
     /   \
    2     3
   / \   / \
  1   3 2   4

思路:
中序遍历
方法一:
利用辅助数组,把中序遍历的结果存入,看熟不是升序的

方法二:
既然是中序遍历,那么只要用一个辅助变量记录上次的值,只要这次节点的值大于上次节点的值,那么就是升序的

# -*- coding:utf-8 -*-
import sys


class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None


class Checker:

    def checkBST(self, root):
        # write code here
        self.arr = []
        self.bsf(root)
        return self.arr == sorted(self.arr)

    def bsf(self,root):
        if not root:
            return
        self.bsf(root.left)
        self.arr.append(root)
        self.bsf(root.right)



方法二:

有false发生就返回,

class Checker:

    mi = -9999
    def checkBST(self,root):

        if not root:
            return True
        if not self.checkBST(root.left):
            return False

        if root.val > self.mi:
            self.mi = root.val
        else:
            return False

        if not self.checkBST(root.right):
            return False

        return True
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容