Skip to content

Tree

BFS

  • declare a queue
queue = deque([root])
  • pop from queuepopleft
node = queue.popleft()

DFS

最简单的,base case+recursion on chilren

稍微复杂一点,加help function,在help function里recursion

recursion

Construct Binary Tree from Preorder and Inorder Traversal这个题目很巧妙,第一次想不出来办法的那种,貌似有点想出来,但还是看答案才恍然大悟。通过root来分array,递归的建立左右子树。

Binary Search Tree

基本是需要inorder的遍历,需要helper函数. - 在helper函数外声明全局变量(1个是result,1个是prev,都声明为None) - help函数 - 首先判断是否有node和res是否不是None,是的话就返回 - 递归左子树 - 如果prev不是None,就更新result和prev - 更新prev - 递归右子树 - 调用helper函数 - return res

example

class Solution:
    def isValidBST(self, root: Optional[TreeNode]) -> bool:
        self.isbst = None
        self.prev = None
        def dfs(node):
            if not node or self.isbst is not None:
                return
            dfs(node.left)
            if self.prev is not None:
                if self.prev >= node.val:
                    self.isbst = False
                    return
            self.prev = node.val
            dfs(node.right)
        dfs(root)
        return True if self.isbst == None else False

time complexity/space complexity

O(N), O(logN)-O(N)