建立二叉树后求二叉树的镜像
时间: 2024-06-19 20:02:32 浏览: 63
二叉树的镜像是指将一棵二叉树的左右子树互换得到的新二叉树。对于一棵二叉树的镜像,我们可以通过递归的方法来实现。
具体实现方法如下:
1. 首先交换根节点的左右子节点
2. 递归地对根节点的左右子树分别进行镜像操作
3. 递归终止条件:节点为null
以下是Java代码实现:
```
public TreeNode mirrorTree(TreeNode root) {
if (root == null) return null;
//交换根节点的左右子节点
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
//递归对左右子树分别进行镜像操作
mirrorTree(root.left);
mirrorTree(root.right);
return root;
}
```
相关问题
操作给定的二叉树,将其变换为原二叉树的镜像,并输出原二叉树和镜像二叉树的先序遍历序列。 原二叉树: 镜像二叉树:
为了将给定的二叉树转换为其镜像(即左右子节点互换),我们可以使用递归的方法来翻转每个节点及其子树。这里有一个简单的Java方法,首先定义一个二叉树节点类`TreeNode`,然后实现翻转函数`mirrorTree`,最后提供先序遍历的功能。
```java
// 定义二叉树节点
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this.val = val;
left = null;
right = null;
}
}
// 深度优先搜索遍历(包括原树和镜像树)
List<Integer> preOrder(TreeNode node) {
List<Integer> result = new ArrayList<>();
if (node != null) {
result.add(node.val);
result.addAll(preOrder(node.left));
result.addAll(preOrder(node.right));
}
return result;
}
// 反转二叉树
TreeNode mirrorTree(TreeNode root) {
if (root == null) {
return null;
}
TreeNode temp = root.left;
root.left = mirrorTree(root.right);
root.right = mirrorTree(temp);
return root;
}
public void printPreOrders(TreeNode root, String prefix) {
System.out.println(prefix + "Root: " + root.val);
printPreOrders(root.left, prefix + "Left -> ");
printPreOrders(root.right, prefix + "Right -> ");
}
// 主函数
public static void main(String[] args) {
// 创建原二叉树示例
// 这里省略了具体的创建树结构的代码,因为您没有提供具体的树结构,你可以手动构建一个或者从文件或数据库读取
// 转换并获取镜像树
TreeNode originalRoot = ...; // 原始根节点
TreeNode mirrorRoot = mirrorTree(originalRoot);
// 输出原树和镜像树的先序遍历序列
printPreOrders(originalRoot, "Original Tree: ");
printPreOrders(mirrorRoot, "Mirrored Tree: ");
}
```
在这个代码中,`mirrorTree`函数负责实际的翻转过程,`preOrder`用于先序遍历打印节点值,而`printPreOrders`则用于递归地打印原树和镜像树的先序遍历结果。
如果你想测试这个功能,你需要替换`originalRoot`变量为你自己的二叉树实例。如果提供了具体例子,我可以帮助你更详细地演示如何执行这些操作。
将二叉树对称交换,即求二叉树镜像C语言
将一棵二叉树对称交换即求该二叉树的镜像。在C语言中,可以通过递归实现对二叉树的镜像操作。具体实现步骤如下:
1. 如果二叉树为空,则返回空。
2. 如果二叉树不为空,则交换左右子树。
3. 递归对左子树进行镜像操作。
4. 递归对右子树进行镜像操作。
5. 返回交换后的二叉树。
代码如下:
```
void mirror(struct TreeNode* root) {
if (root == NULL) return;
struct TreeNode* temp = root->left;
root->left = root->right;
root->right = temp;
mirror(root->left);
mirror(root->right);
}
```
阅读全文