100.相同的樹
算法:
def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
if not p and not q:
return True #兩棵樹均為空,返回真
if not p and q:
return False #有一棵樹有空顿肺,證明不相等,返回假
if not q and p:
return False
return p.val == q.val and self.isSameTree(p.left,q.left) and self.isSameTree(p.right,q.right) #遞歸判斷是否相等
101.對(duì)稱二叉樹
算法:
def isSymmetric(self, root: TreeNode) -> bool:
if root:
return self.recursion(root.left, root.right) #從root出發(fā)逞姿,進(jìn)入自定義函數(shù)
else:
return False
def recursion(p,q):
if p and q:
return p.val == q.val and self.recursion(p.left,q.right) and self.recursion(p.right,q.left) #三個(gè)條件均為真時(shí)免钻,返回真
else:
return not q and not p #遞歸到葉子節(jié)點(diǎn)之下糯彬,判斷是否均為空
104.二叉樹的最大深度
算法:
def maxDepth(self, root: TreeNode) -> int:
if root :
return 0 #如果為葉子結(jié)點(diǎn)纽乱,返回0
else:
return max(self.maxDepth(root.left), self.maxDepth(root.right))+1 #直接返回+1后的葉子結(jié)點(diǎn)
107.二叉樹的層次遍歷 II
算法:
def levelOrderBottom(self, root: TreeNode) -> List[List[int]]:
if not root:
return []
queue = [root] #首先將根節(jié)點(diǎn)放入隊(duì)列
res = []
while queue:
templist = [] #聲明一個(gè)數(shù)組
length = len(queue)
for i in range(length): #根據(jù)隊(duì)列中數(shù)的數(shù)量進(jìn)行循環(huán)
temp = queue.pop(0) #取出隊(duì)列中第一個(gè)數(shù)
templist.append(temp.val) #加入templist
if temp.left:
queue.append(temp.left) #將左子樹節(jié)點(diǎn)加入隊(duì)列
if temp.right:
queue.append(temp.left) #將右子樹節(jié)點(diǎn)加入隊(duì)列
res.append(templist) #一層循環(huán)完后芳绩,將結(jié)果加入res
return res[::-1] #進(jìn)行數(shù)組倒排