102.二叉树的层序遍历
迭代法
层序遍历使用队列,同时记录每层的个数
class Solution:
    def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
        res = []
        if not root:
            return res
        queue = collections.deque()
        queue.append(root)
        while queue:
            size = len(queue)
            tmp = []
            for _ in range(size):
                node = queue.popleft()
                tmp.append(node.val)
                if node.left:
                    queue.append(node.left)
                if node.right:
                    queue.append(node.right)
            res.append(tmp)
        return res递归法
class Solution:
    def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
        result = []
        self.order(root, result, 0)
        return result
    
    def order(self, cur, result, depth):
        if not cur:
            return
        if len(result) == depth:
            result.append([])
        result[depth].append(cur.val)
        self.order(cur.left, result, depth+1)
        self.order(cur.right, result, depth+1)226.翻转二叉树
递归法
递归时,中序遍历会重复翻转部分,本题只能使用前序遍历和后序遍历
能够在看题解之前写出来,有进步
class Solution:
    def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
        # 前序遍历
        if not root:
            return
        root.left, root.right = root.right, root.left
        self.invertTree(root.left)
        self.invertTree(root.right)
        return root
class Solution:
    def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
        # 后序遍历
        if not root:
            return
        self.invertTree(root.left)
        self.invertTree(root.right)
        root.left, root.right = root.right, root.left
        return root101. 对称二叉树
递归法
class Solution:
    def isSymmetric(self, root: Optional[TreeNode]) -> bool:
        if not root:
            return True
        return self.symmetric(root.left, root.right)
    def symmetric(self, left, right):
        if (not left and right) or (not right and left):
            return False
        if not left and not right:
            return True
        if left.val != right.val:
            return False
        return self.symmetric(left.left, right.right) and self.symmetric(left.right, right.left)