題目連結:
題目意譯:
給定一棵二元搜尋樹(Binary Search Tree,BST)的根節點以及一個數值。你需要在該棵 BST 的節點裡找到一節點值等於給定的該數值。請回傳以該目標節點為根節點的子樹。如果這樣子的節點不存在,請回傳空節點(NULL)。
注意一棵空的樹會被表示為空(NULL),因此你會看到期望輸出(樹的序列化格式)為 [],而不是 null 。
範例測資:
給定樹:
4
/ \
2 7
/ \
1 3
以及要搜尋的數字:2
你應回傳這個子樹:
2
/ \
1 3
在上面的範例中,如果我們想搜尋 5 這個值,因為我們沒有節點值為 5 的,因此我們應回傳空節點。
解題思維:
根據二元搜尋樹的定義,左子樹的所有節點值皆小於根節點之值、右子樹的所有節點值皆大於根節點之值(因為每個節點值都不一樣,所以不用考慮一樣時的情況)。
因此便可以從根節點開始,每次都判斷當前節點之值是否等於要搜尋的值。如果是的話,就回傳該節點;反之,看搜尋值是大於還是小於當前節點之值。大於就走右子樹、小於就走左子樹。
當走到沒得走時,就表示整棵樹並不包含要搜尋的值,因此回傳 NULL。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。