BST判断

作者: jojo1313 | 来源:发表于2021-07-07 14:34 被阅读0次

    判断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
    

    相关文章

      网友评论

          本文标题:BST判断

          本文链接:https://www.haomeiwen.com/subject/uryoultx.html