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.对称二叉树
算法:
def isSymmetric(self, root: TreeNode) -> bool:
if root:
return self.recursion(root.left, root.right) #从root出发,进入自定义函数
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) #三个条件均为真时,返回真
else:
return not q and not p #递归到叶子节点之下,判断是否均为空
104.二叉树的最大深度
算法:
def maxDepth(self, root: TreeNode) -> int:
if root :
return 0 #如果为叶子结点,返回0
else:
return max(self.maxDepth(root.left), self.maxDepth(root.right))+1 #直接返回+1后的叶子结点
107.二叉树的层次遍历 II
算法:
def levelOrderBottom(self, root: TreeNode) -> List[List[int]]:
if not root:
return []
queue = [root] #首先将根节点放入队列
res = []
while queue:
templist = [] #声明一个数组
length = len(queue)
for i in range(length): #根据队列中数的数量进行循环
temp = queue.pop(0) #取出队列中第一个数
templist.append(temp.val) #加入templist
if temp.left:
queue.append(temp.left) #将左子树节点加入队列
if temp.right:
queue.append(temp.left) #将右子树节点加入队列
res.append(templist) #一层循环完后,将结果加入res
return res[::-1] #进行数组倒排