226.翻转二叉树
1.前序遍历
递归法
class Solution:
def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
if not root:
return None
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 None
stack=[root]
while stack:
cur=stack.pop()
cur.left,cur.right=cur.right,cur.left
if cur.left:
stack.append(cur.left)
if cur.right:
stack.append(cur.right)
return root
2.中序遍历
递归法
lass Solution:
def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
if not root:
return None
self.invertTree(root.left)
root.left,root.right=root.right,root.left
self.invertTree(root.left)
return root
迭代法
class Solution:
def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
if not root:
return None
stack=[root]
while stack:
cur=stack.pop()
if cur.left:
stack.append(cur.left)
cur.left,cur.right=cur.right,cur.left
if cur.left:
stack.append(cur.left)
return root
3.后序遍历
递归法
lass 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.left
return root
迭代法
class Solution:
def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
if not root:
return None
stack=[root]
while stack:
cur=stack.pop()
if cur.left:
stack.append(cur.left)
if cur.right:
stack.append(cur.right)
cur.left,cur.right=cur.right,cur.left
return root
4.层序遍历(广度优先遍历)
class Solution:
def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
if not root:
return None
queue=collections.deque([root])
while queue:
cur=queue.pop()
cur.left,cur.right=cur.right,cur.left
if cur.left:
queue.append(cur.left)
if cur.right:
queue.append(cur.right)
return root