第六章 二叉树(三)
主要内容
二叉树递归
题目
104.二叉树的最大深度 (优先掌握递归)
题目描述
思路分析
代码
# Definition for a binary tree node.
# 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:
return self.getdepth(root)
def getdepth(self,node):
if not node:
return 0
leftdepth = self.getdepth(node.left) # 左
rightdepth = self.getdepth(node.right)# 右
depth = 1 + max(leftdepth, rightdepth)# 中
return depth
559.n叉树的最大深度
题目描述
思路分析
代码
"""
# Definition for a Node.
class Node:
def __init__(self, val=None, children=None):
self.val = val
self.children = children
"""
class Solution:
def maxDepth(self, root: 'Node') -> int:
return self.getDepth(root)
def getDepth(self, node):
if not node:
return 0
depth = 0
for child in node.children:
depth = max(depth, self.getDepth(child))
depth = 1 + depth
return depth
题目描述
思路分析
求二叉树的最小深度和求二叉树的最大深度的差别主要在于处理左右孩子不为空的逻辑。
代码
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def minDepth(self, root: Optional[TreeNode]) -> int:
return self.getDepth(root)
def getDepth(self, node):
if not node:
return 0
leftdepth = self.getDepth(node.left)
rightdepth = self.getDepth(node.right)
if node.left and not node.right:
return 1 + leftdepth
elif node.right and not node.left:
return 1 + rightdepth
else:
return 1 + min(leftdepth,rightdepth)
222.完全二叉树的节点个数(优先掌握递归)
题目描述
思路分析
代码
# Definition for a binary tree node.
# 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:
return self.getNodeNum(root)
def getNodeNum(self, node):
if not node:
return 0
leftnum = self.getNodeNum(node.left)
rightnum = self.getNodeNum(node.right)
num = 1 + leftnum + rightnum
return num