BST判断

2021-07-07  本文已影响0人  jojo1313

判断BST:
1.假如二叉树的左子树不为空,则左子树上所有节点的值均小于它的根节点的值; 假如右子树不空,则右子树上所有节点的值均大于它的根节点的值;它的左右子树也为二叉搜索树。
2.引入 无穷小float('-inf'), 无穷大float('inf')作为root值判断媒介

    def isValidBST(self, root):
        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.left, lower, val):
                return False
            if not helper(node.right, val, upper):
                return False
            
            return True
            
        return helper(root)

也可以用中序遍历思路判断是否为BST
从根节点开始append to list
从左子树末尾开始和比较 pop of list
然后再从右子树顶部append pop 逐次向下递归判断

    def isValidBST(self, root):
        stack,inorder=[],float('-inf')
        while stack or root:
            while root:
                stack.append(root)
                root = root.left
            root = stack.pop()
            if root.val <= inorder:
                return False
            inorder = root.val
            root = root.right

        return True
上一篇下一篇

猜你喜欢

热点阅读