二叉树的镜像

101 阅读2分钟

「这是我参与2022首次更文挑战的第18天,活动详情查看:2022首次更文挑战

二叉树的镜像

题目

请完成一个函数,输入一个二叉树,该函数输出它的镜像。

例如输入:

4

/ \

2 7

/ \ / \

1 3 6 9

镜像输出:

4

/ \

7 2

/ \ / \

9 6 3 1

示例 1:

输入: root = [4,2,7,1,3,6,9]
输出: [4,7,2,9,6,3,1]

限制:

题目分析

题目同样比较清晰,就是将这个二叉树镜像输出。我们可以使用栈来作为辅助解决这个问题

代码实现

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public TreeNode mirrorTree(TreeNode root) {
        if (root == null) {
            return null;
        }
        Stack<TreeNode> stack = new Stack<TreeNode>(){{
            add(root);
        }};

        while (!stack.isEmpty()) {
            TreeNode treeNode = stack.pop();
            if (treeNode.left!=null) {
                stack.add(treeNode.left);
            }
            if (treeNode.right !=null) {
                stack.add(treeNode.right);
            }
            TreeNode  temp = treeNode.left;
            treeNode.left = treeNode.right;
            treeNode.right = temp;
        }
        return root;

    }
}

这是我用java实现的功能,每个题都用不同的解法和写法,我大体整理了一下自己的思路然后就写了,也没有再想其他的方法,如果你有更好的解法,欢迎和我留言,我们一起进步,一起学习数据结构,共同进步,通过这道题能更熟悉二叉树的镜像输出的操作。

通过代码可以看出,先将根节点入栈,然后出栈,把节点的左右子节点入栈,交换这个的位置,依次循环,直到为空,最后我们返回根节点root就可以了。大体思路是这样的。这道题目也可以采用递归的方法,我在这里就把细说了。当然,使用队列的先进后出的特性也可以,思路可以说非常的多。

总结

这篇文章主要解决了二叉树的镜像输出的问题,同样考察的是二叉树的广度优先遍历的过程是怎样的,解决二叉树的镜像输出的问题我们使用了栈作为辅助,也可以使用递归算法来解决这个问题,在这里就不详细展开说了。总之,对于二叉树的广度优先遍历,我们需要理解并掌握,所有二叉树的相关问题都可能涉及广度优先遍历和深度优先遍历。

如果有不当之处,欢迎指正。