「这是我参与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就可以了。大体思路是这样的。这道题目也可以采用递归的方法,我在这里就把细说了。当然,使用队列的先进后出的特性也可以,思路可以说非常的多。
总结
这篇文章主要解决了二叉树的镜像输出的问题,同样考察的是二叉树的广度优先遍历的过程是怎样的,解决二叉树的镜像输出的问题我们使用了栈作为辅助,也可以使用递归算法来解决这个问题,在这里就不详细展开说了。总之,对于二叉树的广度优先遍历,我们需要理解并掌握,所有二叉树的相关问题都可能涉及广度优先遍历和深度优先遍历。
如果有不当之处,欢迎指正。