用java写一个二叉树翻转

发布于:2024-06-22 ⋅ 阅读:(121) ⋅ 点赞:(0)
class TreeNode {
    int val;
    TreeNode left, right;

    TreeNode(int val) {
        this.val = val;
        left = right = null;
    }
}

public class BinaryTree {
    TreeNode root;

    // 递归翻转二叉树
    public TreeNode invertTree(TreeNode root) {
        if (root == null) {
            return null;
        }

        // 递归翻转左子树和右子树
        TreeNode left = invertTree(root.left);
        TreeNode right = invertTree(root.right);

        // 交换左右子树
        root.left = right;
        root.right = left;

        return root;
    }

    // 测试示例
    public static void main(String[] args) {
        BinaryTree tree = new BinaryTree();
        tree.root = new TreeNode(1);
        tree.root.left = new TreeNode(2);
        tree.root.right = new TreeNode(3);
        tree.root.left.left = new TreeNode(4);
        tree.root.left.right = new TreeNode(5);

        System.out.println("原始二叉树:");
        tree.printTree(tree.root);

        // 翻转二叉树
        tree.root = tree.invertTree(tree.root);

        System.out.println("\n翻转后的二叉树:");
        tree.printTree(tree.root);
    }

    // 打印二叉树(中序遍历)
    void printTree(TreeNode node) {
        if (node == null) {
            return;
        }

        printTree(node.left);
        System.out.print(node.val + " ");
        printTree(node.right);
    }
}

代码定义了一个简单的二叉树节点类 TreeNode,以及一个二叉树类 BinaryTree。其中 invertTree 方法用于翻转二叉树,通过递归的方式对每个节点进行左右子树的翻转。在 main 方法中,创建了一个简单的二叉树,并进行了翻转操作,最后打印出翻转后的二叉树结果。


网站公告

今日签到

点亮在社区的每一天
去签到