本人新手为了面试互联网公司,将刷题做一个记录以及总结,方便之后学习!!
第23道问题 剑指offer 27为一道简单题
题目:
力扣https://leetcode-cn.com/problems/er-cha-shu-de-jing-xiang-lcof/
1.自己思考
从图中可以看出,镜像指的是根节点不变,左节点和有节点互换。
之前考虑用分段法处理,每一段代表树的每一层,但这种方法限制太多,尤其是子树不存在的情况下。
采用递归实现比较好,出口就是跟节点没有了。
class Solution {
public TreeNode mirrorTree(TreeNode root) {
if(root == null){
return null;
}
//左右节点分别调用镜像方法
TreeNode left = mirrorTree(root.right);
TreeNode right =mirrorTree(root.left);
//之后交换
root.left = left;
root.right = right;
return root;
}
}
结果:
2.查看题解
发现有人利用栈的辅助,同样实现了二叉树的镜像 。
将根节点入栈,每次将左右节点互换,直至root为null结束。
class Solution {
public TreeNode mirrorTree(TreeNode root) {
if(root == null){
return null;
}
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while(!stack.isEmpty()){
TreeNode tt =stack.pop();
if(tt.left != null){
stack.push(tt.left);
}
if(tt.right != null){
stack.push(tt.right);//进栈作为一个的根节点
}
TreeNode tmp = tt.left;//进栈作为一个的根节点
tt.left =tt.right;
tt.right = tmp;
}
return root;
}
}
结果:
总结:
1.二叉树常用递归方法,本质上就是将一个大二叉树分成小二叉树运算。