java 写一个二叉树反转
时间: 2024-03-01 14:22:55 浏览: 18
二叉树反转,即将每个节点的左右子树交换位置。可以使用递归实现:
```java
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this.val = val;
}
}
public class BinaryTreeInversion {
public TreeNode invertTree(TreeNode root) {
if (root == null) {
return null;
}
// 交换左右子树
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
// 递归处理左右子树
invertTree(root.left);
invertTree(root.right);
return root;
}
}
```
在 main 方法中可以测试一下:
```java
public static void main(String[] args) {
/*
* 4
* / \
* 2 7
* / \ / \
* 1 3 6 9
*/
TreeNode node1 = new TreeNode(1);
TreeNode node2 = new TreeNode(2);
TreeNode node3 = new TreeNode(3);
TreeNode node4 = new TreeNode(4);
TreeNode node6 = new TreeNode(6);
TreeNode node7 = new TreeNode(7);
TreeNode node9 = new TreeNode(9);
node4.left = node2;
node4.right = node7;
node2.left = node1;
node2.right = node3;
node7.left = node6;
node7.right = node9;
BinaryTreeInversion inversion = new BinaryTreeInversion();
TreeNode invertedTree = inversion.invertTree(node4);
// 输出反转后的二叉树的前序遍历结果
printPreOrder(invertedTree);
}
private static void printPreOrder(TreeNode root) {
if (root == null) {
return;
}
System.out.print(root.val + " ");
printPreOrder(root.left);
printPreOrder(root.right);
}
```
输出结果为:`4 7 9 6 2 3 1`,说明二叉树已经被反转了。