二叉树的最大深度
题目源于leetcode104. Maximum Depth of Binary Tree
解题思路:
1、递归
a.若只有根节点,则深度为1
b.左右子树分别递归自身求得最大深度
c.取左右最大深度的最大值
2.迭代(栈)
a.引用栈来存取节点数和深度值
b.依次遍历左右子树的节点,将深度值此次记录添加到栈中
c.返回左右子树深度值的最大值
3.队列
a.引用队列
b.依次分别遍历左右子树,若存在节点,将层次数添加到队列中
c.返回层次数
python实现:
#递归
def maxDepth(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if root is None:
return 0
else:
left_height=self.maxDepth(root.left)
right_height=self.maxDepth(root.right)
return max(left_height,right_height)+1
#栈(迭代)
def maxDepth(self, root):
"""
:type root: TreeNode
:rtype: int
"""
stack = []
if root is not None:
stack.append((1, root))
depth = 0
while stack != []:
current_depth, root = stack.pop()
if root is not None:
depth = max(depth, current_depth)
stack.append((current_depth + 1, root.left))
stack.append((current_depth + 1, root.right))
return depth
#Solution3 in a pythonic way
def maxDepth(self, root):
depth = 0
stack = [(root, 0)]
while stack:
node, level = stack.pop()
if not node:
depth = max(res, level)
else:
stack.append((node.right, level+1))
stack.append((node.left, level+1))
return depth
#队列
class Solution(object):
def maxDepth(self, root):
"""
:type root: TreeNode
:rtype: int
"""
depth = 0
level = [root] if root else []
while level:
depth += 1
queue = []
for el in level:
if el.left:
queue.append(el.left)
if el.right:
queue.append(el.right)
level = queue
return depth