1. 程式人生 > >【LeetCode-面試演算法經典-Java實現】【114-Flatten Binary Tree to Linked List(二叉樹轉單鏈表)】

【LeetCode-面試演算法經典-Java實現】【114-Flatten Binary Tree to Linked List(二叉樹轉單鏈表)】

原題

  Given a binary tree, flatten it to a linked list in-place.
  For example,
  Given

         1
        / \
       2   5
      / \   \
     3   4   6

  The flattened tree should look like:

   1
    \
     2
      \
       3
        \
         4
          \
           5
            \
             6

題目大意

  給定一棵二叉樹,將它轉成單鏈表,使用原地演算法。

解題思路

  從根結點(root)找左子樹(l)的最右子結點(x),將root的右子樹(r)接到x的右子樹上(x的右子樹為空),root的左子樹整體調整為右子樹,root的左子樹賦空。

程式碼實現

樹結點類

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

演算法實現類

public class Solution {

    public
void flatten(TreeNode root) { TreeNode head = new TreeNode(-1); head.right = root; TreeNode node = head; while (node.right != null) { node = node.right; if (node.left != null) { TreeNode end = node.left; while (end.right != null
) { end = end.right; } TreeNode tmp = node.right; node.right = node.left; node.left = null; end.right = tmp; } } head.right = null; // 去掉引用方便垃圾回收 } }

評測結果

  點選圖片,滑鼠不釋放,拖動一段位置,釋放後在新的視窗中檢視完整圖片。

這裡寫圖片描述

特別說明