1,问题描述
操作给定的二叉树,将其变换为源二叉树的镜像。
2,解题思路
这道题的思路倒是不难,就是利用递归的思路,如下:
- 先将根节点的左右子树调换;
- 再递归处理根节点的左右子树。
但是这个题有两种特殊的二叉树需要考虑到,一种是只有左子树,一种是只有右子树。
下面给出了自己写的有些冗余的代码,以及优化后的代码。
3,源码
- 自己写的代码(代码有些冗余)
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public void Mirror(TreeNode root) {
if(root == null) return;
if(root.left == null && root.right == null) return;
if(root.left == null){
root.left = root.right;
root.right = null;
Mirror(root.left);
}else if(root.right == null){
root.right = root.left;
root.left = null;
Mirror(root.right);
}else if(root.left != null && root.right != null){
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
Mirror(root.left);
Mirror(root.right);
}
}
}
- 优化后的代码
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public void Mirror(TreeNode root) {
if(root == null) return;
if(root.left == null && root.right == null) return;
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
if(root.left != null){
Mirror(root.left);
}
if(root.right != null){
Mirror(root.right);
}
}
}
博客围绕操作给定二叉树,将其变换为源二叉树的镜像展开。介绍解题思路,利用递归,先调换根节点左右子树,再递归处理左右子树,还考虑了只有左子树和只有右子树的特殊情况,最后给出冗余代码和优化后的代码。
950

被折叠的 条评论
为什么被折叠?



