Binary Tree DFS Traversal

思路

我们一般在三个情形下会用到top down dfs。第一种是题目要求我们做preorder/inorder/postorder的traversal,或是写出他们的iterator,那么我们只能用dfs traversal的方法自上而下。第二种是题目找所有的具体可行方案,那么这种情况下,我们就需要用到dfs backtracking的思想。最后如果题目只能通过自上而下的方式而非自下而上,那么我们需要使用dfs。

一般来说,traversal里面preorder是最好用的,因为顺序是根,左,右。所以我们可以直接处理当前root的逻辑。

题型

  • iterator:如果要写iterator,一般我们要写iterative的栈操作。
  • 返回所有path: dfs backtracking
  • 根据depth划分层级:一般这种问题需要我们记录以depth为key的层级信息。

    题目

traversal类

inorder

  • Leetcode 173. Binary Search Tree Iterator (难点是iterative)
  • Leetcode 99. Recover Binary Search Tree
  • Leetcode 94. Binary Tree Inorder Traversal

preorder

  • Leetcode 144. Binary Tree Preorder Traversal (难点是iterative)
  • Leetcode 114. Flatten Binary Tree to Linked List (Facebook店面考了iterative)
  • Leetcode 404. Sum of Left Leaves
  • Leetcode 314. Binary Tree Vertical Order Traversal (Facebook店面,这道题更直观的解法是BFS因为可以保证从上到下,如果用DFS可能会出问题,所以我们还得针对每一个offset list的depth进行排序,时间复杂度更高)

postorder

  • Leetcode 145. Binary Tree Postorder Traversal (难点是iterative)

返回所有具体path

  • Leetcode 257. Binary Tree Paths
  • Leetcode 113. Path Sum II

根据depth划分层级

  • Leetcode 199. Binary Tree Right Side View

results matching ""

    No results matching ""