简述Java如何实现翻转二叉树 ?
参考答案:
在Java中,翻转二叉树通常意味着将每个节点的左右子节点交换。这可以通过递归或迭代的方式来实现。下面我将展示如何使用递归方法来翻转二叉树。
首先,定义一个二叉树节点的类:
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
然后,你可以使用递归方法来翻转二叉树:
public class Solution {
public TreeNode invertTree(TreeNode root) {
if (root == null) {
return null;
}
// 交换左右子节点
TreeNode temp = root.left;
root.left = invertTree(root.right);
root.right = invertTree(temp);
return root;
}
}
在这个递归方法中,我们首先检查根节点是否为空。如果为空,我们直接返回null。然后,我们交换根节点的左右子节点,并递归地对左右子树进行翻转。最后,我们返回翻转后的根节点。
你可以通过以下方式测试这个方法:
public class Main {
public static void main(String[] args) {
// 创建一个二叉树
TreeNode root = new TreeNode(4);
root.left = new TreeNode(2);
root.right = new TreeNode(7);
root.left.left = new TreeNode(1);
root.left.right = new TreeNode(3);
root.right.left = new TreeNode(6);
root.right.right = new TreeNode(9);
// 翻转二叉树
Solution solution = new Solution();
TreeNode invertedTree = solution.invertTree(root);
// 打印翻转后的二叉树(这里需要编写一个打印二叉树的函数)
printTree(invertedTree);
}
// 一个简单的二叉树打印函数(中序遍历)
public static void printTree(TreeNode root) {
if (root == null) {
return;
}
printTree(root.left);
System.out.print(root.val + " ");
printTree(root.right);
}
}
这个printTree
函数使用中序遍历来打印二叉树的节点值。你可以看到翻转后的二叉树与原始二叉树的不同。