跳到主要内容

简述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函数使用中序遍历来打印二叉树的节点值。你可以看到翻转后的二叉树与原始二叉树的不同。