代码随想录算法训练营第十六天
104.二叉树的最大深度
代码
# !/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2022.11
# @Author : hello algorithm!
# @Note : https://leetcode.cn/problems/maximum-depth-of-binary-tree/
# Definition for a binary tree node.
from typing import Optional
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
"""
后序遍历,方便理解
"""
def maxDepth(self, root: Optional[TreeNode]) -> int:
def dfs(cur_node: Optional[TreeNode], depth) -> int:
if cur_node is None:
return depth
depth += 1
left_depth = dfs(cur_node.left, depth)
right_depth = dfs(cur_node.right, depth)
depth -= 1
return max(left_depth, right_depth)
return dfs(root, 0)
if __name__ == '__main__':
root = TreeNode(3)
a = TreeNode(9)
b = TreeNode(20)
root.left = a
root.right = b
b.left = TreeNode(15)
b.right = TreeNode(7)
s = Solution()
print(s.maxDepth(root))
111.二叉树的最小深度
代码
# !/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2022.11
# @Author : hello algorithm!
# @Note : https://leetcode.cn/problems/minimum-depth-of-binary-tree/
from typing import Optional
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
"""
dfs空判空条件尽量不要动
如何判断叶子节点
"""
def minDepth(self, root: Optional[TreeNode]) -> int:
def dfs(cur_node: Optional[TreeNode]) -> int:
if cur_node is None:
return 0
left_depth = dfs(cur_node.left)
right_depth = dfs(cur_node.right)
if cur_node.left is None and cur_node.right:
return 1 + right_depth
if cur_node.left and cur_node.right is None:
return 1 + left_depth
return 1+min(left_depth,right_depth)
return dfs(root)
if __name__ == '__main__':
root = TreeNode(3)
a = TreeNode(9)
b = TreeNode(20)
root.left = a
# root.right = b
# b.left = TreeNode(15)
# b.right = TreeNode(7)
s = Solution()
print(s.minDepth(root))
222.完全二叉树的节点个数
代码
# !/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2022.11
# @Author : hello algorithm!
# @Note : https://leetcode.cn/problems/count-complete-tree-nodes/
# Definition for a binary tree node.
from typing import Optional
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def countNodes(self, root: Optional[TreeNode]) -> int:
def dfs(cur_node: Optional[TreeNode]) -> int:
if cur_node is None:
return 0
left_num = dfs(cur_node.left)
right_num = dfs(cur_node.right)
return 1 + left_num + right_num
return dfs(root)
if __name__ == '__main__':
pass