1. 程式人生 > >114. Flatten Binary Tree to Linked List【Medium】【將給定的二叉樹轉化為“只有右孩子節點”的鏈表(樹)】

114. Flatten Binary Tree to Linked List【Medium】【將給定的二叉樹轉化為“只有右孩子節點”的鏈表(樹)】

bmi 轉化 water public fin linked in-place ould baidu

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

For example, given the following tree:

    1
   /   2   5
 / \   3   4   6

The flattened tree should look like:

1
   2
       3
           4
               5
                   6
Accepted 218,918 Submissions 533,947

【解析】由上圖可知,如果右子樹不為空,則右子樹最後肯定為左子樹最有一個靠右的孩子節點的右子樹,而左子樹最後成為整棵樹的右子樹。這樣,首先判斷左子樹是否為空,不為空就尋找到樹根的左孩子節點,然後尋找該節點是否有右孩子,如果有繼續尋找,直到找到屬於葉子節點的右孩子,此時,該節點的右子樹“指向”當前樹的右子樹,並將當前左子樹變為樹根的右孩子,將整棵樹左孩子置為空。最後,根節點“指向”根節點的右孩子,繼續上述操作,直到整棵樹遍歷完即得到結果。

1.首先,將根節點的右子樹,連接到根節點的左子樹的最右節點,如下圖所示:

技術分享圖片

2.然後將左子樹移動到右邊,如下圖所示:

技術分享圖片

3.之後,將根節點的右節點 作為 當前的根節點,循環進行。

技術分享圖片 技術分享圖片

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 
*/ class Solution { public void flatten(TreeNode root) { while(root != null) { if(root.left != null) { TreeNode pre = root.left; while(pre.right != null) { pre = pre.right; } pre.right
= root.right; root.right = root.left; root.left = null; } root = root.right; } } }

技術分享圖片

114. Flatten Binary Tree to Linked List【Medium】【將給定的二叉樹轉化為“只有右孩子節點”的鏈表(樹)】