?LeetCode刷題實戰(zhàn)114:二叉樹展開為鏈表
Given a binary tree, flatten it to a linked list in-place.
題意

解題
https://www.cnblogs.com/gongyanzh/p/12901595.html
將左子樹插入到右子樹的地方
將原來的右子樹接到左子樹的最右邊節(jié)點
考慮新的右子樹的根節(jié)點,一直重復上邊的過程,直到新的右子樹為 null
? ? ?1
???/? \
??2???5
?/ \? ? ?\
3??4? ? ?6
//將 1 的左子樹插入到右子樹的地方
????1
?????\
? ? ? ?2? ? ? 5
?????/?\? ? ?\
????3???4????6????????
//將原來的右子樹接到左子樹的最右邊節(jié)點
????1
?????\
??????2??????????
?????/ \
????3???4??
?????????\
??????????5
???????????\
????????????6
????????????
?//將 2 的左子樹插入到右子樹的地方
????1
?????\
??????2??????????
???????\
????????3???????4??
?????????????????\
??????????????????5
???????????????????\
????????????????????6???
????????
?//將原來的右子樹接到左子樹的最右邊節(jié)點
????1
?????\
??????2??????????
???????\
????????3??????
?????????\
??????????4??
???????????\
????????????5
?????????????\
??????????????6
思路看上面,代碼實現(xiàn):
class?Solution?{
????public?void?flatten(TreeNode root) {
????????//將左子樹接到右子樹 root.right = root.left
????????//為了做到這一點,首先要把右子樹移走,移到哪?移到左子樹的右子樹
????????//pre = root.left; pre.right = root.right;
????????while(root != null){
????????????//左子樹為空,直接考慮下個節(jié)點
????????????if(root.left == null){
????????????????root = root.right;
????????????}else{
????????????????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;
????????????}
????????}
????}
}
評論
圖片
表情
