1.编写一个实验程序,假设非空二叉树采用二叉链存储结构,所有结点值为单个 字符且不相同。将一棵二又树bt的左、右子树进行交换,要求不破坏原二叉树, 并且采用相关数据进行测试。Java编写代码并分析解题思路
时间: 2023-06-09 20:03:19 浏览: 292
JAVA 二叉树实验
好的,您的第一个问题是如何在不破坏原二叉树的前提下,交换二叉树中的左右子树,并用Java编写代码。
首先,我们需要定义一个二叉树的节点类,包含左右子节点和节点值。
```java
class TreeNode {
char val;
TreeNode left;
TreeNode right;
TreeNode(char x) { val = x; }
}
```
然后,我们编写一个交换左右子树的方法,通过递归方式实现交换。
```java
public static TreeNode invertTree(TreeNode root) {
if (root == null) {
return null;
}
TreeNode left = root.left;
root.left = invertTree(root.right);
root.right = invertTree(left);
return root;
}
```
接下来,我们需要构建一个二叉树用于测试。
```java
TreeNode root = new TreeNode('A');
root.left = new TreeNode('B');
root.right = new TreeNode('C');
root.left.left = new TreeNode('D');
root.left.right = new TreeNode('E');
```
最后,我们调用交换左右子树的方法,然后打印结果进行测试。
```java
TreeNode newRoot = invertTree(root);
System.out.println(newRoot.val); // A
System.out.println(newRoot.left.val); // C
System.out.println(newRoot.right.val); // B
System.out.println(newRoot.left.left.val); // null
System.out.println(newRoot.left.right.val); // null
```
我们可以看到,经过交换左右子树的方法,原来的二叉树得到了交换后的新二叉树,且原二叉树没有被破坏。
总结一下思路,我们通过递归方式遍历二叉树,将所有的左右子节点进行交换,最终返回交换后的根节点。代码实现较为简单,但需要注意递归终止条件和递归过程中左右子节点的交换。
阅读全文