98. Validate Binary Search Tree

https://leetcode.com/problems/validate-binary-search-tree/

solution

  • 注意二叉搜索树定义:根节点大于所有左子树,小于所有右子树。单个树递归的做法是无法满足定义的

  • 递归也可以采用直观解法思路:中序展开为数组,判断数组是否排好序

class Solution:
    def __init__(self):
        self.pre = None

    def isValidBST(self, root: Optional[TreeNode]) -> bool:
        if not root:
            return True

        # 注意左右需要返回
        left = self.isValidBST(root.left)

        if self.pre is not None and self.pre >= root.val:
            return False
        self.pre = root.val

        right = self.isValidBST(root.right)
        return left and right

时间复杂度:O(n) 空间复杂度:O(h)

  • 层序遍历

  • 后序遍历

follow up

958. Check Completeness of a Binary Tree

  • bfs: 一个是否最后一层的flag (节点个数), 一个是否应该stop的flag (是否有空的左或右节点)

  • bfs: None也加入到queue中, 最后把None pop出去,检查是否还有额外node.

  • bfs: 记录层序的上一个node, 如果现在node非空,上一个node为None,则False

Last updated