二叉樹的映象

低吟不作語發表於2020-10-06

前言

牛客網劍指offer的66道題,刷起來!每道題會提供簡單的思路以及測試通過的程式碼

題目描述

二叉樹的映象

二叉樹結構:

 class TreeNode {
     int val;
     TreeNode left;
     TreeNode right;
     TreeNode(int x) { val = x; }
 }

注:點選左下角的閱讀原文即可跳轉到原文,可以提交程式碼

解答思路

在上題中我說了對於與二叉樹有關的題目,90% 是採取遞迴的方式來解決比較簡單的。而且解法還都非常相似,沒看過上道題的或許可以看一下:

如果你遞迴學了還不錯的話,這道題用遞迴會很簡單,我們假設函式 Mirror() 就是求源二叉樹的映象。

剛開始的源二叉樹:

二叉樹的映象

那麼我們可以先對根節點的左右子樹進行映象化:

left = Mirror(root.left);

right = Mirror(root.right);

映象化之後的結果:

二叉樹的映象

之後我們只需要將 root 的左右節點進行交換即可

二叉樹的映象

程式碼如下:

public class 二叉樹的映象 {
    public void Mirror(TreeNode root) {
        if(root == null)
            return;
        root = solve(root);
    }
    private TreeNode solve(TreeNode root) {
        if(root == null)
            return root;
        // 遞迴先把左右節點映象化
        TreeNode left = solve(root.left);
        TreeNode right = solve(root.right);
        // 對左右子樹進行交換。
        root.left = right;
        root.right = left;
        return root;
    }
}

相關文章