LeetCode刷題筆記 114(涉及到二叉樹)

2021-10-02 21:59:20 字數 1572 閱讀 8572

題目:二叉樹展開為鍊錶

給定乙個二叉樹,原地將它展開為鍊錶。

例如,給定二叉樹

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 輸出 ...