114. Flatten Binary Tree to Linked List【Medium】【將給定的二叉樹轉化為“只有右孩子節點”的鏈表(樹)】
阿新 • • 發佈:2019-02-26
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 6Accepted 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】【將給定的二叉樹轉化為“只有右孩子節點”的鏈表(樹)】