【劍指offer】27. 二叉樹的映象

戰忽局小可愛發表於2021-01-02

題目描述

在這裡插入圖片描述
在這裡插入圖片描述

// 力扣
// 請完成一個函式,輸入一個二叉樹,該函式輸出它的映象。


// 牛客
// 操作給定的二叉樹,將其變換為源二叉樹的映象。

題解

// 遞迴一定要按照函式的語義來遞迴,往往不需要知道遞迴細節
// 遞迴到最後總是會需要解決問題的基本單元,在這道題目中,
// 問題的基本單元就是交換一個根結點的左結點(假設是葉結點吧)和右結點

// 力扣
// 執行用時:0 ms, 在所有 Java 提交中擊敗了100.00%的使用者
// 記憶體消耗:35.7 MB, 在所有 Java 提交中擊敗了82.58%的使用者
class Solution {
    // 解題函式:使輸入二叉樹root映象翻轉
	// 遍歷按照前序遍歷的順序,先對當前結點使用swap,
	// 然後在左子樹遞迴映象翻轉函式mirrorTree,
	// 最後在右子樹遞迴映象翻轉函式mirrorTree
    public TreeNode mirrorTree(TreeNode root) {
        if (root == null)
            return null;
        swap(root);  // 
        mirrorTree(root.left);
        mirrorTree(root.right);
        return root;
    }

	// 交換函式:僅對當前根結點A的左子樹與右子樹交換一次位置
    private TreeNode swap(TreeNode A) {
        TreeNode temp = A.left;
        A.left = A.right;
        A.right = temp;
        return A;
    }
}
// 牛客
// 執行時間:15ms
// 佔用記憶體:9836k
public class Solution {
    public void Mirror(TreeNode root) {
        if (root == null)
            return;
        root = swap(root);
        Mirror(root.left);
        Mirror(root.right);
    }
    
    private TreeNode swap(TreeNode A) {
        TreeNode temp = A.left;
        A.left = A.right;
        A.right = temp;
        return A;
    }
}

相關文章