返回
用递归和分治思维重新理解 LeetCode 226. 翻转二叉树,让编程不再困难
前端
2024-01-06 20:24:11
理解问题:
LeetCode 226. 翻转二叉树问题如下:
给定一个二叉树,你需要将它的左右子树交换。
例如:
4
/ \
2 7
/ \ / \
1 3 6 9
翻转后:
4
/ \
7 2
/ \ / \
9 6 3 1
算法思路:
我们可以使用递归和分治的思想来解决这个问题。具体步骤如下:
- 如果当前节点为空,则直接返回。
- 交换当前节点的左右子树。
- 递归地翻转左子树。
- 递归地翻转右子树。
代码实现:
def invert_tree(root):
if not root:
return
# 交换左右子树
root.left, root.right = root.right, root.left
# 递归地翻转左子树
invert_tree(root.left)
# 递归地翻转右子树
invert_tree(root.right)
return root
public TreeNode invertTree(TreeNode root) {
if (root == null) {
return null;
}
// 交换左右子树
TreeNode tmp = root.left;
root.left = root.right;
root.right = tmp;
// 递归地翻转左子树
invertTree(root.left);
// 递归地翻转右子树
invertTree(root.right);
return root;
}
TreeNode* invertTree(TreeNode* root) {
if (root == nullptr) {
return nullptr;
}
// 交换左右子树
std::swap(root->left, root->right);
// 递归地翻转左子树
invertTree(root->left);
// 递归地翻转右子树
invertTree(root->right);
return root;
}
总结:
使用递归和分治的思维来解决 LeetCode 226. 翻转二叉树问题,可以帮助我们更好地理解算法的思想和实现方式。同时,我们也提供了详细的Python、Java和C++实现代码,供您参考和使用。希望这篇文章能够帮助您轻松掌握这一算法技巧,并在编程实践中灵活运用。