104.二叉树的最大深度
题解:https://programmercarl.com/0104.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%9C%80%E5%A4%A7%E6%B7%B1%E5%BA%A6.html#%E6%80%9D%E8%B7%AF
最前用层序法做过,这次用递归法
前序求的就是深度,使用后序求的是高度。
- 二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数或者节点数(取决于深度从0开始还是从1开始)
- 二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数或者节点数(取决于高度从0开始还是从1开始)
而根节点的高度就是二叉树的最大深度
class Solution:
def maxDepth(self, root: Optional[TreeNode]) -> int:
return self.depth(root)
def depth(self,node) -> int:
if not node:
return 0
left_depth = self.depth(node.left)
right_depth = self.depth(node.right)
node_depth = max(left_depth,right_depth) + 1
return node_depth
还是难啊
559.n叉树的最大深度
class Solution:
def maxDepth(self, root: 'Node') -> int:
return self.depth(root)
def depth(self,node) -> int:
if not node:
return 0
cur_max = 1
for child in node.children:
cur_max = max(cur_max,self.depth(child) + 1 )
return cur_max
111.二叉树的最小深度
class Solution:
def minDepth(self, root: Optional[TreeNode]) -> int:
if not root:
return 0
left_depth = self.minDepth(root.left)
right_depth = self.minDepth(root.right)
if left_depth + right_depth != 0 and (left_depth == 0 or right_depth == 0):
return 1 + max(left_depth, right_depth)
cur_depth = min(left_depth,right_depth)
return cur_depth + 1
222.完全二叉树的节点个数
class Solution:
def countNodes(self, root: Optional[TreeNode]) -> int:
if not root:
return 0
left_nodes = self.countNodes(root.left)
right_nodes = self.countNodes(root.right)
return left_nodes + right_nodes + 1