感悟:這道題還是用遞歸。感覺涉及到樹的問題,大部分都要用遞歸做
大致思路:1)如果root節點存在左右邊樹,那麼就直接將左右邊樹交換
2)交換完根節點的左右邊樹後,就分別用遞歸處理左右邊樹,詳細解析看代碼
//操作給定的二叉樹,將其變換爲源二叉樹的鏡像。
//{8,7,#,6,#,5,#,4}
public class Test02 {
public static void main(String[] args) {
//測試樣例
TreeNode treeNode4=new TreeNode(4);
TreeNode treeNode5=new TreeNode(5);
TreeNode treeNode6=new TreeNode(6);
TreeNode treeNode7=new TreeNode(7);
TreeNode treeNode8=new TreeNode(8);
treeNode8.left=treeNode7;
treeNode7.left=treeNode6;
treeNode6.left=treeNode5;
treeNode5.left=treeNode4;
Solution solution=new Solution();
solution.Mirror(treeNode8);
}
}
class Solution {
public void Mirror(TreeNode root) {
//根節點爲空
if(root==null) {
return;
}
//只有一個節點,不用變換
if(root.left==null&root.right==null) {
return;
}
if(root.left!=null) {//左節點不爲空
if(root.right==null) {//右節點爲空
//直接將左邊樹移到右邊
root.right=root.left;
root.left=null;
Mirror(root.right);
}else {//右節點不爲空
TreeNode treeNode=root.right;
root.right=root.left;
root.left=treeNode;
Mirror(root.left);
Mirror(root.right);
}
}else {//左節點爲空
if(root.right==null) {
return;
}else {
//直接將右邊樹移到左邊
root.left=root.right;
root.right=null;
Mirror(root.left);
}
}
}
}
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}