title: LEETCODE-DAY16
date: 2024-03-08 16:03:28
tags:
今日内容:104.二叉树的最大深度、559.n叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数
知识点:
二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数或者节点数(取决于深度从0开始还是从1开始)
二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数后者节点数(取决于高度从0开始还是从1开始)
T1 昨天已做回顾一下
T104.二叉树的最大深度
层序遍历解法(属于迭代解法)
class Solution:
def maxDepth(self, root: Optional[TreeNode]) -> int:
res=0
q=deque()
if root:
q.append(root)
while q:
level=list()#存放每一层的节点
size=len(q)
for i in range(size):
temp=q.popleft()
if temp.left:
q.append(temp.left)
if temp.right:
q.append(temp.right)
level.append(temp.val)
res+=1
return res
也可采用其他遍历方式(前序递归)后面再补,(属于递归解法)
T2
class Solution:
def maxDepth(self, root: 'Node') -> int:
res=0
q=deque()
if root:
q.append(root)
while q:
size=len(q)
for i in range(size):
temp=q.popleft()
for child in temp.children:
q.append(child)
res+=1
return res
T3
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。,注意是叶子节点。
什么是叶子节点,左右孩子都为空的节点才是叶子节点
class Solution:
def minDepth(self, root: Optional[TreeNode]) -> int:
res=0
q=deque()
if root:
q.append(root)
while q:
size=len(q)
for i in range(size):
temp=q.popleft()
if not temp.left and not temp.right:
return res+1
if temp.left:
q.append(temp.left)
if temp.right:
q.append(temp.right)
res+=1
return res
T4
class Solution:
def countNodes(self, root: Optional[TreeNode]) -> int:
res=0
q=deque()
if root:
q.append(root)
res+=1
while q:
size=len(q)
for i in range(size):
temp=q.popleft()
if temp.left:
q.append(temp.left)
res+=1
else:
return res
if temp.right:
q.append(temp.right)
res+=1
else:
return res
return res
利用了完全二叉树的性质:最底一层节点从左向右排列,故遇见第一个子节点为None就return
对一般的二叉树就不能这样简化了
def countNodes(self, root: Optional[TreeNode]) -> int:
res=0
q=deque()
if root:
q.append(root)
res+=1
while q:
size=len(q)
for i in range(size):
temp=q.popleft()
if temp.left:
q.append(temp.left)
res+=1
#else:
#return res
if temp.right:
q.append(temp.right)
res+=1
#else:
#return res
return res