給定一個二叉樹,原地將它展開為鏈表。
例如,給定二叉樹
? ? 1
? ?/ \
? 2 ? 5
?/ \ ? \
3 ? 4 ? 6
將其展開為:
1
?\
? 2
? ?\
? ? 3
? ? ?\
? ? ? 4
? ? ? ?\
? ? ? ? 5
? ? ? ? ?\
? ? ? ? ? 6
思路:所有左子樹的最右節點接上右子樹即可。
比如例子中:3接上4,4接上5
/*** 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;}}
}
?