c语言,设二叉树采用二叉链表存储,设计递归算法实现二叉树中所有结点的左右孩子交换。
时间: 2024-05-10 18:02:36 浏览: 143
好的,这个问题可以回答。递归算法实现二叉树中所有结点的左右孩子交换的代码如下:
```
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` 两个指向左右孩子的指针。
相关问题
设二叉树采用二叉链表存储,设计递归算法实现二叉树中所有结点的左右孩子交换。
算法思路:
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语言编写已知二叉树采用二叉链表存储结构,设计一个算法,使二叉树中所有结点的左右子树相互交换
好的,您所提出的问题是:如何用c语言编写已知二叉树采用二叉链表存储结构,设计一个算法,使二叉树中所有结点的左右子树相互交换。
以下是该问题的算法实现:
```
struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
};
void swap(struct TreeNode* root) {
if (root == NULL) return;
struct TreeNode* tmp = root->left;
root->left = root->right;
root->right = tmp;
swap(root->left);
swap(root->right);
}
```
解释:从根节点开始遍历每个节点,对于每个节点,交换其左右子树。然后递归地对其左右子节点执行相同的操作。最终,整棵二叉树中的每个节点的左右子树都被交换。
阅读全文