返回
翻转二叉树,妙招尽在掌握!
前端
2024-01-27 22:52:33
翻转二叉树,顾名思义,就是将一颗二叉树的左右子树进行互换,从而得到一棵新的二叉树。这道算法题看似简单,实则蕴含着深刻的思想和技巧。掌握翻转二叉树的解法,不仅能锻炼你的算法能力,还能加深你对二叉树的理解。
一、递归法
递归法是一种经典的算法解决方法,它通过不断地将问题分解成更小的子问题,直至子问题能够轻松解决,然后逐层往上回溯,最终得到整个问题的解。在翻转二叉树问题中,我们可以采用以下步骤进行递归求解:
- 递归终止条件:如果当前节点为空,则无需翻转,直接返回。
- 递归过程:对于当前节点,首先翻转其左右子树,然后将左右子树互换。最后,返回翻转后的当前节点。
代码实现:
def invertTree(root):
if not root:
return None
# 翻转左右子树
left = invertTree(root.left)
right = invertTree(root.right)
# 互换左右子树
root.left = right
root.right = left
# 返回翻转后的当前节点
return root
二、迭代法
迭代法是一种非递归的算法解决方法,它通过不断地迭代操作,逐步逼近问题的解。在翻转二叉树问题中,我们可以采用以下步骤进行迭代求解:
- 初始化一个栈,将根节点压入栈中。
- 循环执行以下步骤:
- 从栈中弹出当前节点。
- 翻转当前节点的左右子树。
- 将当前节点的左右子树压入栈中。
- 直到栈为空时,循环结束。
代码实现:
def invertTree(root):
if not root:
return None
stack = [root]
while stack:
# 弹出当前节点
node = stack.pop()
# 翻转左右子树
node.left, node.right = node.right, node.left
# 将左右子树压入栈中
if node.left:
stack.append(node.left)
if node.right:
stack.append(node.right)
# 返回翻转后的根节点
return root
结语
翻转二叉树,看似简单,实则蕴含着深刻的算法思想和技巧。通过递归和迭代两种方法的介绍,希望你能对二叉树的理解更加深刻,算法能力也更加娴熟。快来动手实践,巩固你的算法功底吧!