3.编写将一棵二叉树的所有左右子树进行交换的算法。
时间: 2024-05-07 18:21:47 浏览: 112
可以使用递归的方法实现二叉树的左右子树交换。具体实现步骤如下:
1. 如果二叉树为空,直接返回空。
2. 如果二叉树不为空,交换当前节点的左右子树。
3. 递归交换当前节点的左子树和右子树。
4. 返回当前节点。
以下是该算法的 Python 代码实现:
```python
def invert_tree(root):
if not root:
return None
root.left, root.right = root.right, root.left
invert_tree(root.left)
invert_tree(root.right)
return root
```
该算法的时间复杂度是O(n),其中n是二叉树的节点数,因为每个节点都需要被访问一次。空间复杂度是O(h),其中h是二叉树的高度,因为递归调用的栈空间最大深度为树的高度。
相关问题
编写算法将二叉树的左右子树进行交换。
算法步骤:
1. 如果二叉树为空,则返回空。
2. 如果二叉树不为空,则交换当前节点的左右子树。
3. 递归交换当前节点的左子树。
4. 递归交换当前节点的右子树。
代码实现:
```
void swapTree(TreeNode* root) {
if (root == nullptr) {
return;
}
TreeNode* temp = root->left;
root->left = root->right;
root->right = temp;
swapTree(root->left);
swapTree(root->right);
}
```
请你以程序员的身份用C++语言编写可以运行的编写将一棵二叉树的所有左右子树进行交换的算法
好的,以下是以C++语言编写的二叉树交换左右子树的算法:
```c++
#include <iostream>
using namespace std;
// 定义二叉树结构体
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// 交换二叉树的左右子树
void swapTree(TreeNode* root) {
if (!root) return;
TreeNode* temp = root->left;
root->left = root->right;
root->right = temp;
swapTree(root->left);
swapTree(root->right);
}
// 打印二叉树,用于验证结果
void printTree(TreeNode* root) {
if (!root) return;
cout << root->val << " ";
printTree(root->left);
printTree(root->right);
}
int main() {
// 构建二叉树
TreeNode* root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->left->left = new TreeNode(4);
root->left->right = new TreeNode(5);
root->right->left = new TreeNode(6);
root->right->right = new TreeNode(7);
// 打印交换前的二叉树
cout << "Before swap:" << endl;
printTree(root);
// 交换左右子树
swapTree(root);
// 打印交换后的二叉树
cout << endl << "After swap:" << endl;
printTree(root);
return 0;
}
```
注:以上代码仅供参考,实际使用中需要根据具体情况进行修改。
阅读全文