1 """
2 Given a binary tree, find its maximum depth.
3 The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.
4 Note: A leaf is a node with no children.
5 Example:
6 Given binary tree [3,9,20,null,null,15,7],
7 3
8 / \
9 9 20
10 / \
11 15 7
12 return its depth = 3.
13 """
14 """
15 此题好题,将提供三种解法
16 """
17 class TreeNode:
18 def __init__(self, x):
19 self.val = x
20 self.left = None
21 self.right = None
22
23 class Solution1(object):
24 def maxDepth(self, root):
25 if root == None:
26 return 0
27 else:
28 leftdepth = self.maxDepth(root.left)
29 rightdepth = self.maxDepth(root.right)
30 return max(leftdepth, rightdepth)+1
31 """
32 递归的方法,分别递归左子树,右子树的深度,取最大的+1(根结点)
33 """
34 class Solution2(object):
35 def maxDepth(self, root):
36 if root == None:
37 return 0
38 queue = []
39 depth = 0
40 queue.append(root)
41 while queue:
42 cur = [x.val if x else None for x in queue]
43 newqueue = []
44 for x in queue:
45 if x.left:
46 newqueue.append(x.left) #bug 不是queue,应该是newqueue
47 if x.right:
48 newqueue.append(x.right)
49 queue = newqueue
50 depth += 1
51 return depth
52
53 """用队列进行BFS搜索,记录depth"""
54
55 class Solution3(object):
56 def maxDepth(self, root):
57 if root == None:
58 return 0
59 stack = []
60 depth = 0
61 stack.append((1, root)) #!!!用一个tuple存当前结点与其深度
62 while stack:
63 current_depth, root = stack.pop() #cur 记录当前结点深度
64 if root:
65 stack.append((current_depth+1, root.left)) #bug (,) 少加了一个括号
66 stack.append((current_depth+1, root.right))
67 depth = max(depth, current_depth)
68 return depth
69
70 """
71 用栈进行DFS搜索,
72 值得注意的是:用(current_depth, root)入栈
73 记录当前结点的深度,每入栈一个结点 cur+1
74 """