day 16: 二叉树 补卡!
Leetcode 104: Maximum Depth of Binary Tree
dfs: recursively return left branch and right branch
class Solution:
def maxDepth(self, root: Optional[TreeNode]) -> int:
def depth(root, d):
if root == None: return d
return max(depth(root.left, d + 1), depth(root.right, d + 1))
return depth(root,0)
Leetcode 111. Minimum Depth of Binary Tree
class Solution:
def minDepth(self, root: Optional[TreeNode]) -> int:
if not root:
return 0
else:
lDepth = self.minDepth(root.left)
rDepth = self.minDepth(root.right)
# consider one of branches will be none, which means we need to traversal in the other branch
if lDepth == 0 or rDepth == 0:
return max(lDepth, rDepth) + 1
# if both root exits, we calculate minimum depth
else:
return min(lDepth, rDepth) + 1
Leetcode 222. Count Complete Tree Nodes
只能理解BFS。 DFS 根本用不到啊 真实的工程中!
class Solution:
def countNodes(self, root: Optional[TreeNode]) -> int:
if not root: return 0
queue = [root]
def bfs(root):
res = []
while queue:
node = queue.pop(0)
res.append(node)
if node!= None and node.left!=None:
queue.append(node.left)
if node!= None and node.right!=None:
queue.append(node.right)
return len(res)
return bfs(root)