題目:二叉樹展開為鍊錶
給定乙個二叉樹,原地將它展開為鍊錶。
例如,給定二叉樹
1
/ \ 2
5/ \ \34
6
將其展開為:
1
\ 2\3
\4\5
\6
答案:
1.展開為鍊錶的順序其實就是二叉樹的先序遍歷。
(1)將原來的右子樹接到左子樹的最右邊結點
(2)將左子樹插入到右子樹的地方
(3)根節點指向右子樹的根節點,重複(1)(2)步驟,直至新的右子樹為null
理解圖示:
1
/ \ 2
5/ \ \ 34
6//將1的右子樹插入到左子樹的最右邊結點1/
2/ \
34 \5
\6
//將1的左子樹插入到右子樹的地方
1 \
2/ \
34 \5
\6
//將2的右子樹插入到左子樹的最右邊結點
1 \
2/3
\4 \5
\6
//將2的左子樹插入到右子樹的地方
1 \
2
\ 3
\4 \5
\6
class
solution
else
//將原來的右子樹接到左子樹的最右邊節點
pre.right = root.right;
// 將左子樹插入到右子樹的地方
root.right = root.left;
root.left = null;
// 考慮下乙個節點
root = root.right;}}
}}
2.類似先序遍歷的非遞迴實現,將沿途的非空右子樹根節點用棧儲存起來,並將當前的左子樹插入到右子樹的地方(若左子樹為空則將棧頂元素插入到右子樹的地方)
1 (1)遍歷到1,將右子樹5入棧,1的右子樹指向2
/ \ (2)遍歷到2,將右子樹4入棧,2的右子樹指向3
25 (3)遍歷到3,因為右子樹為空,所以無需入棧,3的右子樹指向7
/ \ \ (4)遍歷到7,因為右子樹為空,所以無需入棧,因為左子樹為空,則彈出棧頂元素4,7的右子樹指向434
6 (5)遍歷到4,將右子樹9入棧,4的右子樹指向8
// \ ...
789
class
solution
else p.right = p.left;
//左子樹不為空則將當前結點的右子樹設為左子樹
p.left = null;
p = p.right;
//遍歷至當前結點的右子樹}}
}
Leetcode刷題筆記
1.兩數之和給定乙個整數陣列nums 和乙個目標值target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。ps 你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。思路 用target減去nums中的每乙個數,並設立乙個字典來記錄對應的下標 class...
LeetCode刷題筆記
實現strstr 給定乙個 haystack 字串和乙個 needle 字串,在 haystack 字串中找出 needle 字串出現的第乙個位置 從0開始 如果不存在,則返回 1。示例 1 輸入 haystack hello needle ll 輸出 2 示例 2 輸入 haystack aaaa...
LeetCode刷題筆記
給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 ...