前往
大廳
主題

LeetCode - 700. Search in a Binary Search Tree 解題心得

Not In My Back Yard | 2020-12-25 00:00:09 | 巴幣 2 | 人氣 248

題目連結:


題目意譯:
給定一棵二元搜尋樹(Binary Search Tree,BST)的根節點以及一個數值。你需要在該棵 BST 的節點裡找到一節點值等於給定的該數值。請回傳以該目標節點為根節點的子樹。如果這樣子的節點不存在,請回傳空節點(NULL)。

注意一棵空的樹會被表示為空(NULL),因此你會看到期望輸出(樹的序列化格式)為 [],而不是 null 。



範例測資:
給定樹:
    4
   / \
  2   7
 / \
1   3
以及要搜尋的數字:2

你應回傳這個子樹:
  2
 / \
1   3
在上面的範例中,如果我們想搜尋 5 這個值,因為我們沒有節點值為 5 的,因此我們應回傳空節點。


解題思維:
根據二元搜尋樹的定義,左子樹的所有節點值皆小於根節點之值、右子樹的所有節點值皆大於根節點之值(因為每個節點值都不一樣,所以不用考慮一樣時的情況)。

因此便可以從根節點開始,每次都判斷當前節點之值是否等於要搜尋的值。如果是的話,就回傳該節點;反之,看搜尋值是大於還是小於當前節點之值。大於就走右子樹、小於就走左子樹。

當走到沒得走時,就表示整棵樹並不包含要搜尋的值,因此回傳 NULL。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作