【LeetCode-面試演算法經典-Java實現】【114-Flatten Binary Tree to Linked List(二叉樹轉單鏈表)】
阿新 • • 發佈:2019-01-22
原題
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; // 去掉引用方便垃圾回收
}
}
評測結果
點選圖片,滑鼠不釋放,拖動一段位置,釋放後在新的視窗中檢視完整圖片。