二叉树的最大深度
对于深度和高度问题,总结一下。首先定义一颗二叉树,初始化一些方法
# Definition for a binary tree node.
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
def is_root(self, P):
# 判断该节点是否为根节点
pass
def position(self):
# 遍历所有子节点
pass
def is_leaf(self, P):
# 判断该节点是否为叶子节点
pass
def parent(self, P):
# 返回该节点的父节点
pass
接下来根据不同方法对高度和深度进行探讨:
def depth(self, P):
"""
递归根据父节点去求一个节点的深度
时间复杂度O(Dp+1), 最大达到O(n), 即所有节点在一个分支上
"""
if self.is_root(P):
return 0
else:
return self.depth1(self.parent(p))+1
def maxDepth(self, P):
"""
递归遍历所有子节点
求最大深度 对于题目只需要判断P是否为空就可以了
时间复杂度同上
"""
if is_root(P):
return 0
else:
return max(self.maxDepth(root.left), self.maxDepth(root.right))+1
def maxDepth(self, P):
"""
依靠self.depth()方法
递归求节点的最大深度
时间复杂度O(n+Dp), 最大达到O(n**2), 遍历两次节点
"""
return max(self.depth(P)) for P in self.position() is self.is_leaf(P)
def height(self, P):
"""
求某个节点的最大高度
高度是从下往上 而深度是从上往下
最大也是O(n)
"""
if self.is_leaf(P):
return 0
else:
return max(self.height(n) for n in self.children(P))