编写一个递归算法,将用二叉链表表示的二叉树的所有结点的左、右子树交换。
时间: 2024-03-23 19:39:58 浏览: 12
好的,下面是递归算法的实现:
```
void swapTree(TreeNode* root) {
if (root == NULL) {
return;
}
TreeNode* temp = root->left;
root->left = root->right;
root->right = temp;
swapTree(root->left);
swapTree(root->right);
}
```
其中,`TreeNode` 表示二叉树节点的结构体,包含 `left` 和 `right` 两个指向左右子树的指针。
首先判断根节点是否为空,如果是则直接返回。然后交换根节点的左右子树,并递归交换左右子树的子节点,直到遍历完整个二叉树为止。
可以通过以下方式调用该函数:
```
TreeNode* root = new TreeNode();
// 构建二叉树
swapTree(root);
```
注意,在使用该算法时,需要确保输入的二叉树是有效的,并且没有循环引用的情况。
相关问题
设二叉树采用二叉链表存储,设计递归算法实现二叉树中所有结点的左右孩子交换。
算法思路:
1. 如果二叉树为空,直接返回;
2. 如果二叉树不为空,交换当前节点的左右孩子;
3. 递归交换当前节点的左子树和右子树。
代码实现:
```python
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def swapChildren(root):
if not root:
return
root.left, root.right = root.right, root.left
swapChildren(root.left)
swapChildren(root.right)
```
测试样例:
```python
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
root.right.left = TreeNode(6)
root.right.right = TreeNode(7)
swapChildren(root)
# 遍历交换后的二叉树
def preorder(root):
if not root:
return
print(root.val, end=' ')
preorder(root.left)
preorder(root.right)
preorder(root) # 1 3 2 7 6 5 4
```
c语言,设二叉树采用二叉链表存储,设计递归算法实现二叉树中所有结点的左右孩子交换。
好的,这个问题可以回答。递归算法实现二叉树中所有结点的左右孩子交换的代码如下:
```
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);
}
```
其中,`TreeNode` 是二叉树结点的结构体,包括 `left` 和 `right` 两个指向左右孩子的指针。