快轉到主要內容
leetcode 226 - Invert Binary Tree

leetcode 226 - Invert Binary Tree

·
類別 
Leetcode
標籤 
Java Leetcode Easy Tree Problem Blind75
Eason Chiu
作者
Eason Chiu
一個不做筆記就容易忘記的工程師
目錄

題目
#

leetcode 226 - Invert Binary Tree (題目說明請點連結)

題目簡述
#

反轉一個二元樹。

範例
#

Example 1:

Input: root = [4,2,7,1,3,6,9]
Output: [4,7,2,9,6,3,1]
Explanation: 反轉前的樹結構如下:
graph TD; A[4] B[2] C[7] D[1] E[3] F[6] G[9] A --> B A --> C B --> D B --> E C --> F C --> G

反轉後的樹結構如下:

graph TD; A[4] B[7] C[2] D[9] E[6] F[3] G[1] A --> B A --> C B --> D B --> E C --> F C --> G

解題思路
#

這題要求我們反轉一個二元樹,即將每個節點的左右子樹互換。我們可以使用遞迴的方法來實現這個操作。

解法
#

遞迴反轉法(Recursive Approach)

  1. 如果當前節點為空,返回 null
  2. 交換當前節點的左右子樹
  3. 遞迴反轉左子樹
  4. 遞迴反轉右子樹
  5. 返回當前節點

步驟
#

  • 初始化:
    • 檢查根節點是否為空
  • 遞迴反轉:
    • 交換左右子樹
    • 遞迴反轉左子樹
    • 遞迴反轉右子樹
  • 返回結果:
    • 返回反轉後的根節點

例子說明
#

反轉前的樹結構:

graph TD; A[4] B[2] C[7] D[1] E[3] F[6] G[9] A --> B A --> C B --> D B --> E C --> F C --> G

反轉後的樹結構:

graph TD; A[4] B[7] C[2] D[9] E[6] F[3] G[1] A --> B A --> C B --> D B --> E C --> F C --> G

完整程式碼
#

java
/**
 * 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 temp = root.right;
        root.right = root.left;
        root.left = temp;

        // 遞迴反轉左子樹
        invertTree(root.left);
        // 遞迴反轉右子樹
        invertTree(root.right);

        // 返回反轉後的根節點
        return root;
    }
}

時間複雜度
#

  • 時間複雜度O(n),其中 n 是樹中節點的數量,需要遍歷所有節點
  • 空間複雜度O(h),其中 h 是樹的高度,遞迴調用棧的深度

相關文章

leetcode 572 - Subtree of Another Tree
類別 
Leetcode
標籤 
Java Leetcode Easy Tree Problem Blind75
leetcode 100 - Same Tree
類別 
Leetcode
標籤 
Java Leetcode Easy Tree Problem Blind75
leetcode 104 - Maximum Depth of Binary Tree
類別 
Leetcode
標籤 
Java Leetcode Easy BFS Problem DFS Problem Tree Problem Blind75