操作给定的二叉树,将其变换为原二叉树的镜像,并输出原二叉树和镜像二叉树的先序遍历序列。 原二叉树: 镜像二叉树:
时间: 2024-11-18 11:14:22 浏览: 10
二叉树前序中序后序遍历.txt
为了将给定的二叉树转换为其镜像(即左右子节点互换),我们可以使用递归的方法来翻转每个节点及其子树。这里有一个简单的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`变量为你自己的二叉树实例。如果提供了具体例子,我可以帮助你更详细地演示如何执行这些操作。
阅读全文