首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

LeetCode 114:二叉樹展開為鏈表(Java 遞歸前序遍歷解法)

     編輯:Java 綜合教學

LeetCode 114:二叉樹展開為鏈表

題目要求:給定一棵二叉樹,原地將其展開為單鏈表,展開後的順序為前序遍歷順序。

範例

輸入:
     1
    / \
   2   5
  / \   \
 3   4   6

輸出:
1
 \
  2
   \
    3
     \
      4
       \
        5
         \
          6

解法思路:前序遍歷收集節點 → 重構指標

  1. 遞歸前序遍歷,將所有節點按順序存入 List。
  2. 遍歷列表,將每個節點的 left 設為 null,right 指向下一個節點。

Java 實作

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public void flatten(TreeNode root) {
        if (root == null) return;
        List list = preOrder(root);
        TreeNode p = root;
        for (int i = 1; i < list.size(); i++) {
            p.right = list.get(i);
            p.left = null;
            p = p.right;
        }
    }

    public List preOrder(TreeNode root) {
        List list = new ArrayList<>();
        if (root == null) return list;
        list.add(root);
        if (root.left != null) list.addAll(preOrder(root.left));
        if (root.right != null) list.addAll(preOrder(root.right));
        return list;
    }
}

複雜度分析

  • 時間複雜度:O(n),每個節點訪問一次。
  • 空間複雜度:O(n),遞歸堆疊與列表儲存。

進階:可嘗試 Morris 遍歷將空間優化至 O(1)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved