104.二叉树的最大深度
迭代法
class Solution:
def maxDepth(self, root: Optional[TreeNode]) -> int:
if not root:
return 0
queue=collections.deque([root])
path=0
while queue:
size=len(queue)
path+=1
for i in range(size):
cur=queue.popleft()
if cur.left:
queue.append(cur.left)
if cur.right:
queue.append(cur.right)
return path
111.二叉树的最小深度
迭代法
class Solution:
def minDepth(self, root: Optional[TreeNode]) -> int:
if not root:
return 0
queue=collections.deque([root])
path=0
while queue:
size=len(queue)
path+=1
for i in range(size):
cur=queue.popleft()
if not cur.left and not cur.right:
return path
if cur.left:
queue.append(cur.left)
if cur.right:
queue.append(cur.right)
return path
这两题好像之前刷过了,往期博客应该有记载
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
迭代法
import collections
class Solution:
def countNodes(self, root: TreeNode) -> int:
queue = collections.deque()
if root:
queue.append(root)
result = 0
while queue:
size = len(queue)
for i in range(size):
node = queue.popleft()
result += 1 #记录节点数量
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
return result