每日Leetcode—算法(10)

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]   #进行数组倒排

你可能感兴趣的:(每日Leetcode—算法(10))