切換
舊版
前往
大廳
主題

ZeroJudge - d526: Binary Search Tree (BST) 解題心得

Not In My Back Yard | 2018-12-31 20:01:45 | 巴幣 2 | 人氣 353

題目連結:


題目大意:
給定一正整數 N ( 1 ≦ N ≦ 1, 000 ),代表接下來有 N 個正整數 M (皆介於 1 ~ 2 ^ 31 - 1 )。

請依照給定的 M 之順序建一棵二元搜尋樹(Binary Search Tree),並輸出這棵樹的前序探訪(Preorder Traversal)的結果



範例輸入:
11
368 115 121 88 741 762 801 34 41 511 60
6
5 2 10 4 9 15



範例輸出:
368 115 88 34 41 60 121 741 511 762 801
5 2 4 10 9 15



解題思維:
本題需要使用指標的概念來實作。

我們可以先為第一數字建一個節點(「節點」會存本身的值,以及指向左子樹的根、右子樹的根之指標)。接下來,對於每一個數字,我們就從第一個節點(根節點)開始:若是比現在的節點之值小,就走左子樹;大的話,就走右子樹。

當我們插入新節點道這棵樹的最末端(葉節點)時,如果發現要走左子樹,可是目前節點的左子樹為空,就把新節點加在左子樹(用當前節點用來指向左子樹之根的指標,指向新節點的記憶體位置);反之若是走右子樹,與上同理。

最後,對這棵樹進行前序探訪。而前序探訪可以表示為以下的虛擬碼(Pseudocode):
Preorder(Node nowNode)
  If nowNode != NULL
    print nowNode's value
    Preorder(nowNode's left)
    Preorder(nowNode's right)

而以上的函數傳入我們的第一個節點。出來的結果便是我們這棵樹前序探訪的結果(先走到根節點,之後走左子樹,再走右子樹)。

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

創作回應

胖胖貓
新年快樂,新的一年我還是會繼續follow你的每日任務
2019-01-01 14:49:10
Not In My Back Yard
也祝大大新年快樂。
2019-01-01 14:55:21

更多創作