翻转一棵二叉树。
思路:
指针做交换
用递归(前序or后序,中序不行)
前序:中左右
遍历到“中”的时候,交换它的左右孩子
然后分别对它的左孩子和右孩子使用“交换函数”(定义的)(递归)
用后序遍历也可以,就是先分别对左右孩子用交换函数,然后把“中”的左右孩子交换顺序。
中序遍历不可以,因为如果是左中右,先对左子树使用交换函数,然后交换左右子树,然后对右子树使用交换函数(但是此时的右子树是之前的左子树,已经处理过了),但是如果这时继续还是处理左子树,那是可以的,相当于处理了原来的右子树。
前序遍历:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:if not root:return Noneroot.left, root.right = root.right, root.leftself.invertTree(root.left)self.invertTree(root.right)return root
后序遍历:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:if not root:return None self.invertTree(root.left)self.invertTree(root.right)root.left, root.right = root.right, root.leftreturn root