交换二叉树的左右孩子
时间: 2025-01-04 14:30:38 浏览: 9
### 如何在二叉树中交换节点的左孩子和右孩子
为了实现在二叉树中交换节点的左孩子和右孩子的功能,可以遍历整个二叉树并对每个节点执行左右子树互换操作。下面提供了一种基于递归的方式完成此任务的方法。
#### 方法描述
对于每一个非空节点 `node` ,将其左子树赋值给临时变量保存起来,再把当前节点的右子树赋予其左子树位置,最后将之前存储于临时变量中的原左子树放置到现在的右子树的位置上。通过这种方式实现了单个节点上的左右子树交换。接着继续对该节点下的两个新的分支重复上述过程直到访问完整棵树为止[^1]。
#### 代码示例
以下是用 Java 编写的用于交换二叉树所有节点左右子树的一个简单函数:
```java
public class BinaryTree {
static class TreeNode {
int value;
TreeNode left, right;
public TreeNode(int item) {
this.value = item;
left = right = null;
}
}
// Function to swap the subtrees of each node in a binary tree.
public void mirrorBinaryTree(TreeNode root) {
if (root == null) return; // Base case
// Swap the current node's children
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
// Recursively call on both sides after swapping
mirrorBinaryTree(root.left);
mirrorBinaryTree(root.right);
}
}
```
这段程序定义了一个名为 `mirrorBinaryTree()` 的公共成员函数来接收指向根节点的指针作为输入并对其进行处理。如果遇到叶子节点,则直接返回而不做任何改变;如果不是叶子节点,则先交换它的左右子树,之后分别对这两个新形成的子树调用相同的镜像化函数以确保整棵子树都被正确转换。
阅读全文