经典算法题--判断一棵二叉树是否为二叉搜索树

来自LeetCode-98

给定一个二叉树,判断其是否是一个有效的二叉搜索树。

假设一个二叉搜索树具有如下特征:

节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。

分析:根据二叉搜索树的自身特点:任一节点的左子树都比自身节点要小,任一节点的右子树都比自身节点有大

可以有两种方法。

方法一:中序遍历二叉树,若其遍历完成后是个升序数列,则OK

 def helper(node, lower = float('-inf'), upper = float('inf')):
            if not node:
                return True
            
            val = node.val
            if val <= lower or val >= upper:
                return False

            if not helper(node.right, val, upper):
                return False
            if not helper(node.left, lower, val):
                return False
            return True

        return helper(root)

 

 

方法二:递归。任一节点的左子树都比自身节点要小,任一节点的右子树都比自身节点要大

递归时需要传递min,max两个数值出去

def helper(node, lower = float('-inf'), upper = float('inf')):
            if not node:
                return True
            
            val = node.val
            if val <= lower or val >= upper:
                return False

            if not helper(node.right, val, upper):
                return False
            if not helper(node.left, lower, val):
                return False
            return True

        return helper(root)

 

posted @ 2020-12-26 23:12  大西young  阅读(785)  评论(0编辑  收藏  举报