」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Java 中的倒置二元樹

Java 中的倒置二元樹

發佈於2024-11-08
瀏覽:906

最近,我開始練習一些 LeetCode 練習,以提高我的演算法/資料結構技能。我可以說,該平台提供了一個良好的環境,可以與其他開發人員一起練習和學習多種程式語言的解決方案,與他人討論、分享解決方案,並練習大公司要求的程式碼挑戰。

什麼是 LeetCode?

Inverting a binary tree in Java

LeetCode 是一個幫助候選人準備程式設計面試的網站。使用者可以透過使用平台的編碼和演算法問題以及針對候選人解決方案的預定義測試來練習挑戰。 LeetCode 與 HackerRank 一樣,已成為技術面試和程式設計競賽的熱門資源。

我的日常解決問題

我給自己設定的目標是每天至少解決 3 個挑戰,我的解決方案思維方式涉及我的 iPad、一支螢幕筆和 Freeform 應用程式。我嘗試畫出並思考解決方案,這對我提交程式碼有很大幫助。許多挑戰乍看之下似乎很難,但只要花幾分鐘思考和建立解決方案(我建議寫下您的思考過程)。如果我在 30 分鐘內找不到正確的解決方案,那麼我會查看其他開發人員的提交來發現我的錯誤在哪裡(有時是我在程式碼中忘記的一小步)。即使您的解決方案足夠好,我也強烈建議您查看其他人提交的內容,以思考解決該問題的其他方法(或多或少有效)。

反轉二元樹問題

Inverting a binary tree in Java
幾天前,我在 LeetCode 上遇到了反向二元樹問題,這是一些面試中要求的眾所周知的挑戰,也是我在大學上資料結構/演算法課程時看到的問題。儘管我在面試中從未面臨過這項挑戰,也從未在工作中明確地反轉二元樹,但知道如何反轉二元樹讓我在DS、樹和演算法思維方面獲得了更多經驗,並練習了一些諸如遞歸之類的技術。
我建議您在閱讀本文其餘部分之前嘗試解決這個問題

解決方案

反轉二元樹問題要求我「給定二元樹的根,反轉樹,並返回其根。」(換句話說,我們應該「鏡像」樹)。我使用Java程式語言提交了一個解決方案,但其他語言的步驟是相同的(有小的語法變化)。輸入範例和預期輸出如下所示:

Inverting a binary tree in Java

Input: root = [4,2,7,1,3,6,9]
Output: [4,7,2,9,6,3,1]

我們將使用遞迴技術遞歸呼叫 invertTree() 方法,並將樹的某一側作為根傳遞。因此,正如每個遞歸要求的那樣,我們需要定義一個停止條件,遞歸堆疊將在該條件下完成並傳回遞歸呼叫的相應結果。之後,我們只需反轉樹的邊,將root.right 作為參數傳遞給root.left 的遞歸返回值分配給root.left,並對root.right 執行相同的操作,將root.left 遞歸結果的值分配給root.right。 當我們修改原始值時,我們需要一個輔助變數來儲存root.left的原始結果(你可能在大學裡實現過這樣的程式碼,並將其稱為swap()方法。

最後我們回到節點反轉的根。您可以檢查以下程式碼:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode invertTree(TreeNode root) {
        if(root == null) {
            return null;
        }

        TreeNode aux = root.left;
        root.left = invertTree(root.right);
        root.right = invertTree(aux);

        return root;
    }
}

請記住,對於不同的問題可能存在許多不同的解決方案,這很好。每個人都有自己的思考方式和程式設計方式,資料結構領域等。你不需要遵循完全相同的程式碼來解決這個問題,但你必須注意演算法複雜度(你可以使用3個嵌套的for來解決問題,但這比使用 1 for).

的效能較差
版本聲明 本文轉載於:https://dev.to/isacmoura/inverting-a-binary-tree-in-java-4n3g?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • Python環境變量的訪問與管理方法
    Python環境變量的訪問與管理方法
    Accessing Environment Variables in PythonTo access environment variables in Python, utilize the os.environ object, which represents a mapping of envir...
    程式設計 發佈於2025-05-08
  • Android如何向PHP服務器發送POST數據?
    Android如何向PHP服務器發送POST數據?
    在android apache httpclient(已棄用) httpclient httpclient = new defaulthttpclient(); httppost httppost = new httppost(“ http://www.yoursite.com/script.p...
    程式設計 發佈於2025-05-08
  • 如何克服PHP的功能重新定義限制?
    如何克服PHP的功能重新定義限制?
    克服PHP的函數重新定義限制在PHP中,多次定義一個相同名稱的函數是一個no-no。嘗試這樣做,如提供的代碼段所示,將導致可怕的“不能重新列出”錯誤。 但是,PHP工具腰帶中有一個隱藏的寶石:runkit擴展。它使您能夠靈活地重新定義函數。 runkit_function_renction_...
    程式設計 發佈於2025-05-08
  • 如何高效地在一個事務中插入數據到多個MySQL表?
    如何高效地在一個事務中插入數據到多個MySQL表?
    mySQL插入到多個表中,該數據可能會產生意外的結果。雖然似乎有多個查詢可以解決問題,但將從用戶表的自動信息ID與配置文件表的手動用戶ID相關聯提出了挑戰。 使用Transactions和last_insert_id() 插入用戶(用戶名,密碼)值('test','tes...
    程式設計 發佈於2025-05-08
  • 如何使用“ JSON”軟件包解析JSON陣列?
    如何使用“ JSON”軟件包解析JSON陣列?
    parsing JSON與JSON軟件包 QUALDALS:考慮以下go代碼:字符串 } func main(){ datajson:=`[“ 1”,“ 2”,“ 3”]`` arr:= jsontype {} 摘要:= = json.unmarshal([] byte(...
    程式設計 發佈於2025-05-08
  • Java中假喚醒真的會發生嗎?
    Java中假喚醒真的會發生嗎?
    在Java中的浪費喚醒:真實性或神話? 在Java同步中偽裝喚醒的概念已經是討論的主題。儘管存在這種行為的潛力,但問題仍然存在:它們實際上是在實踐中發生的嗎? Linux的喚醒機制根據Wikipedia關於偽造喚醒的文章,linux實現了pthread_cond_wait()功能的Linux實現,...
    程式設計 發佈於2025-05-08
  • 在Pandas中如何將年份和季度列合併為一個週期列?
    在Pandas中如何將年份和季度列合併為一個週期列?
    pandas data frame thing commans date lay neal and pree pree'和pree pree pree”,季度 2000 q2 這個目標是通過組合“年度”和“季度”列來創建一個新列,以獲取以下結果: 在Python中,可以直接使用“...
    程式設計 發佈於2025-05-08
  • 在PHP中如何高效檢測空數組?
    在PHP中如何高效檢測空數組?
    在PHP 中檢查一個空數組可以通過各種方法在PHP中確定一個空數組。如果需要驗證任何數組元素的存在,則PHP的鬆散鍵入允許對數組本身進行直接評估:一種更嚴格的方法涉及使用count()函數: if(count(count($ playerList)=== 0){ //列表為空。 } 對...
    程式設計 發佈於2025-05-08
  • 如何使用Depimal.parse()中的指數表示法中的數字?
    如何使用Depimal.parse()中的指數表示法中的數字?
    在嘗試使用Decimal.parse(“ 1.2345e-02”中的指數符號表示法表示的字符串時,您可能會遇到錯誤。這是因為默認解析方法無法識別指數符號。 成功解析這樣的字符串,您需要明確指定它代表浮點數。您可以使用numbersTyles.Float樣式進行此操作,如下所示:[&& && && ...
    程式設計 發佈於2025-05-08
  • 如何干淨地刪除匿名JavaScript事件處理程序?
    如何干淨地刪除匿名JavaScript事件處理程序?
    刪除匿名事件偵聽器將匿名事件偵聽器添加到元素中會提供靈活性和簡單性,但是當要刪除它們時,可以構成挑戰,而無需替換元素本身就可以替換一個問題。 element? element.addeventlistener(event,function(){/在這里工作/},false); 要解決此問題,請考...
    程式設計 發佈於2025-05-08
  • Python元類工作原理及類創建與定制
    Python元類工作原理及類創建與定制
    python中的metaclasses是什麼? Metaclasses負責在Python中創建類對象。就像類創建實例一樣,元類也創建類。他們提供了對類創建過程的控制層,允許自定義類行為和屬性。 在Python中理解類作為對象的概念,類是描述用於創建新實例或對象的藍圖的對象。這意味著類本身是使用...
    程式設計 發佈於2025-05-08
  • 如何在其容器中為DIV創建平滑的左右CSS動畫?
    如何在其容器中為DIV創建平滑的左右CSS動畫?
    通用CSS動畫,用於左右運動 ,我們將探索創建一個通用的CSS動畫,以向左和右移動DIV,從而到達其容器的邊緣。該動畫可以應用於具有絕對定位的任何div,無論其未知長度如何。 問題:使用左直接導致瞬時消失 更加流暢的解決方案:混合轉換和左 [並實現平穩的,線性的運動,我們介紹了線性的轉換。...
    程式設計 發佈於2025-05-08
  • 人臉檢測失敗原因及解決方案:Error -215
    人臉檢測失敗原因及解決方案:Error -215
    錯誤處理:解決“ error:( - 215)!empty()in Function openCv in Function MultSiscale中的“檢測”中的錯誤:在功能檢測中。”當Face Cascade分類器(即面部檢測至關重要的組件)未正確加載時,通常會出現此錯誤。 要解決此問題,必...
    程式設計 發佈於2025-05-08
  • 如何在GO編譯器中自定義編譯優化?
    如何在GO編譯器中自定義編譯優化?
    在GO編譯器中自定義編譯優化 GO中的默認編譯過程遵循特定的優化策略。 However, users may need to adjust these optimizations for specific requirements.Optimization Control in Go Compi...
    程式設計 發佈於2025-05-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3