编写一个将二叉树中每个结点的左右孩子交换的算法。
时间: 2023-06-19 19:06:10 浏览: 38
可以使用递归的方式来实现二叉树的左右孩子交换,具体实现如下:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def invertTree(root: TreeNode) -> TreeNode:
if root is None:
return None
# 交换左右子树
root.left, root.right = root.right, root.left
# 递归处理左右子树
invertTree(root.left)
invertTree(root.right)
return root
```
该算法的时间复杂度为 $O(n)$,其中 $n$ 是二叉树的结点数。由于采用了递归的方式,因此空间复杂度为 $O(h)$,其中 $h$ 是二叉树的高度。
相关问题
用java编写一个将二叉树中每个结点的左右孩子交换的算法
下面是Java代码实现:
```java
class TreeNode {
int val;
TreeNode left, right;
public TreeNode(int val) {
this.val = val;
this.left = null;
this.right = null;
}
}
public class BinaryTreeSwap {
public void swap(TreeNode root) {
if (root == null) {
return;
}
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
swap(root.left);
swap(root.right);
}
}
```
思路:对于每一个结点,交换它的左右子树,然后对左右子树分别进行递归交换。
编写一个将二叉树中每个结点的左右孩子交换的算法,用c++
下面是使用递归实现二叉树节点左右孩子交换的C++代码:
```c++
#include <iostream>
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;
std::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);
std::cout << "Original Tree: ";
printTree(root);
std::cout << std::endl;
swapTree(root);
std::cout << "Swapped Tree: ";
printTree(root);
std::cout << std::endl;
return 0;
}
```
程序首先定义了一个二叉树的结构体,其中每个节点包含一个值,以及左右两个指针。然后定义了一个递归函数`swapTree`,该函数用于交换二叉树中每个节点的左右孩子,其中交换的方法是通过定义一个临时变量来完成。最后,定义了一个`printTree`函数,用于打印二叉树的值。
在main函数中,首先定义了一个二叉树对象,并初始化了其各个节点的值。然后调用`printTree`函数打印出原始的二叉树。接着调用`swapTree`函数,进行二叉树左右孩子的交换。最后再次调用`printTree`函数,打印出交换后的二叉树。