操作給定的二叉樹,將其變換爲源二叉樹的鏡像。

感悟:這道題還是用遞歸。感覺涉及到樹的問題,大部分都要用遞歸做

大致思路: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;

    }

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章