python二叉树最大深度的计算_104. 二叉树的最大深度(Python)

题目

给定一个二叉树,找出其最大深度。

难度:★★☆☆☆

类型:二叉树

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

说明: 叶子节点是指没有子节点的节点。

示例

给定二叉树 [3,9,20,null,null,15,7],

3

/ \

9 20

/ \

15 7

返回它的最大深度 3 。

解答

方案1:递归法

递归法通过遍历所有结点寻找最大深度,时间复杂度为N。我们编写函数,确定以root为根结点的一棵树的最大深度这样:

如果根结点root为空,则直接返回0;

如果不为空,则是左子树的最大深度d1和右子树的最大深度d2中较大的值加1。

左子树或右子树的最大深度可以通过调用本函数确定。

具体这样实现:

class Solution:

"""

递归法

"""

def maxDepth(self, root):

def max_depth(root): # 计算以root为根节点的二叉树的最大深度

if not root:

return 0

max_left = max_depth(root.left) # 左子树最大深度

max_right = max_depth(root.right) # 右子树最大深度

return max(max_left, max_right) + 1 # 加上根节点,返回当前子树最大深度

return max_depth(root)

方案2:迭代法

我们把每一个结点及其对应的深度作为一条记录,使用栈这个数据结构来存储每条记录,遍历树的每一个结点,并用max_depth变量记录遍历到当前位置的最大深度,直到栈中为空为止。

class Solution:

"""

迭代法

"""

def maxDepth(self, root):

stack = [] # 定义一个空栈,栈中的元素是结点及其对应的深度

if root: # 如果根结点不为空

stack.append((root, 1)) # 则将根节点及其对应深度1组成的元组入栈

max_depth = 0 # 初始化最大深度为零

while stack: # 当栈非空时

tree_node, cur_depth = stack.pop() # 弹出栈顶结点及其对应的深度

if tree_node: # 如果该结点不为空

max_depth = max(max_depth, cur_depth) # 更新当前最大深度,如果该结点深度更大的话

stack.append((tree_node.left, cur_depth+1)) # 将该结点的左孩子结点及其对应深度压入栈中

stack.append((tree_node.right, cur_depth+1)) # 将该结点的右孩子结点及其对应深度压入栈中

return max_depth # 返回遍历结束后的最大深度

如有疑问或建议,欢迎评论区留言~

你可能感兴趣的:(python二叉树最大深度的计算_104. 二叉树的最大深度(Python))