欢迎访问宙启技术站
智能推送

如何在Java中实现翻转二叉树的函数?

发布时间:2023-07-01 01:49:49

翻转二叉树也被称为镜像二叉树,是指将二叉树的左右子树交换位置。在Java中实现翻转二叉树的函数可以使用递归或迭代的方法。下面将为您详细介绍两种方法:

方法一:使用递归

递归是一种解决问题的方法,它将问题分解为更小的子问题。在这种情况下,我们可以通过递归地翻转左右子树来翻转整个二叉树。

代码如下:

class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode(int val) {
        this.val = val;
    }
}

public class BinaryTree {

    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;
    }
}

方法二:使用迭代

除了递归,我们还可以使用迭代的方法来翻转二叉树。我们可以使用一个栈(或队列)来跟踪需要翻转的节点。

代码如下:

class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode(int val) {
        this.val = val;
    }
}

public class BinaryTree {

    public TreeNode invertTree(TreeNode root) {
        if (root == null) {
            return null;
        }

        Stack<TreeNode> stack = new Stack<>();
        stack.push(root);

        while (!stack.isEmpty()) {
            TreeNode current = stack.pop();

            // 翻转左右子树
            TreeNode temp = current.left;
            current.left = current.right;
            current.right = temp;

            if (current.left != null) {
                stack.push(current.left);
            }

            if (current.right != null) {
                stack.push(current.right);
            }
        }

        return root;
    }
}

无论你选择使用递归还是迭代的方法,都可以很容易地翻转二叉树。这两种方法的时间复杂度均为O(n),其中n是二叉树中节点的数量。希望这些代码对你有所帮助!