翻轉一棵二叉樹。
思路:
指針做交換
用遞歸(前序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