题目描述
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
题目解析
-
三节点翻转
直接将跟节点下左右节点互换即可

-
多层节点
先将跟节点左右节点互换,再以其左右节点为“根节点”互换其子节点

代码实现
# Python3
# 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: TreeNode) -> TreeNode:
def traversal(r: TreeNode):
# 递归解法
if r is None:
return
r.left, r.right = traversal(r.right), traversal(r.left)
return r
return traversal(root)
def invertTree_stack(self, root: TreeNode) -> TreeNode:
# 通过栈实现
if root is None:
return
from queue import LifoQueue
st = LifoQueue()
st.put(root)
while not st.empty():
r = st.get()
if r:
r.left, r.right = r.right, r.left
if r.left:
st.put(r.left)
if r.right:
st.put(r.right)
return root
r = TreeNode(4,
left=TreeNode(2, left=TreeNode(1), right=TreeNode(3)),
right=TreeNode(7, left=TreeNode(6), right=TreeNode(9))
)
r = Solution().invertTree2(r)
print(r.val)
print(r.left.val)
print(r.left.left.val)
print(r.left.right.val)
print(r.right.val)
这篇文章介绍了如何翻转一棵二叉树,提供了两种方法:递归和使用栈。在递归方法中,通过交换当前节点的左右子节点来实现翻转;而在栈方法中,利用后进先出的特性,同样达到翻转效果。
140

被折叠的 条评论
为什么被折叠?



