104.二叉树的最大深度
class solution:
def maxdepth(self, root: treenode) -> int:
return self.getdepth(root)
def getdepth(self, node):
if not node:
return 0
leftheight = self.getdepth(node.left) #左
rightheight = self.getdepth(node.right) #右
height = 1 + max(leftheight, rightheight) #中
return height
这段代码是定义了一个名为"Solution"的类,其中有两个方法:
maxdepth
:这个方法接收一个名为root
的参数,代表一个二叉树的根节点。它调用了另一个名为getdepth
的方法来获取树的高度,然后返回这个高度。getdepth
:这个方法接收一个名为node
的参数,代表二叉树的一个节点。首先,如果这个节点是空的(即没有节点),它返回0,因为空树的高度为0。然后,它分别递归地计算左子树和右子树的高度,并选取其中较高的一个,再加上1(代表当前节点),得到树的总高度,最后返回这个总高度。
111.二叉树的最小深度
class Solution:
def getDepth(self, node):
if node is None:
return 0
leftDepth = self.getDepth(node.left) # 左
rightDepth = self.getDepth(node.right) # 右
# 当一个左子树为空,右不为空,这时并不是最低点
if node.left is None and node.right is not None:
return 1 + rightDepth
# 当一个右子树为空,左不为空,这时并不是最低点
if node.left is not None and node.right is None:
return 1 + leftDepth
result = 1 + min(leftDepth, rightDepth)
return result
def minDepth(self, root):
return self.getDepth(root)
- 第1行:定义了一个名为Solution的类。
- 第2行:定义了一个名为getDepth的方法,它接受一个名为node的参数。
- 第3行:如果node为空,即二叉树为空树,返回0。
- 第5行:递归调用getDepth方法,传入node的左子节点,计算左子树的深度。
- 第6行:递归调用getDepth方法,传入node的右子节点,计算右子树的深度。
- 第9行:当一个左子树为空,右子树不为空时,当前节点并不是最低点,返回1加上右子树的深度。
- 第13行:当一个右子树为空,左子树不为空时,当前节点并不是最低点,返回1加上左子树的深度。
- 第17行:计算当前节点的深度,为1加上左子树深度和右子树深度的较小值。
- 第18行:返回当前节点的深度。
这段代码通过递归的方式计算二叉树的最小深度。如果二叉树为空,返回0;否则,分别计算左子树和右子树的深度。在计算过程中,如果一个子树为空而另一个子树不为空,那么当前节点并不是最低点,需要继续向下遍历。最终返回根节点的最小深度作为整个二叉树的最小深度。
222.完全二叉树的节点个数
给出一个完全二叉树,求出该树的节点个数。
class Solution:
def countNodes(self, root: TreeNode) -> int:
return self.getNodesNum(root)
def getNodesNum(self, cur):
if not cur:
return 0
leftNum = self.getNodesNum(cur.left) #左
rightNum = self.getNodesNum(cur.right) #右
treeNum = leftNum + rightNum + 1 #中
return treeNum
这段代码是一个计算二叉树节点数量的函数。下面是代码的详细解释:
- 首先,我们定义了一个类
Solution
,其中包含两个方法:countNodes
和getNodesNum
。 countNodes
方法是给定的,它接受一个二叉树的根节点作为参数(类型为TreeNode
),并返回整数值,即二叉树的节点数量。getNodesNum
方法是一个私有方法,用于计算二叉树的节点数量。它接受一个当前节点作为参数(类型为cur
)。- 在
getNodesNum
方法中,我们首先检查当前节点是否为空。如果为空,说明这是一个空树,因此返回0。 - 接下来,我们递归地调用
getNodesNum
方法来计算左子树的节点数量,并将结果保存在变量leftNum
中。 - 然后,我们递归地调用
getNodesNum
方法来计算右子树的节点数量,并将结果保存在变量rightNum
中。 - 最后,我们计算整个树的节点数量,即将左子树的节点数量、右子树的节点数量和当前节点(根节点)加起来,并将结果保存在变量
treeNum
中。 - 返回
treeNum
作为最终的节点数量。
注意:在给定的代码中,我们假设二叉树的节点类型为TreeNode
,并且具有left
和right
属性分别表示左子树和右子树。