九章演算法 Google面試題 二叉查詢樹迭代器

2021-10-24 09:39:23 字數 1046 閱讀 7442

設計實現乙個帶有下列屬性的二叉查詢樹的迭代器:

next()返回bst中下乙個最小的元素

樣例 1:

輸入:

輸出:[1, 6, 10, 11, 12]

解釋:二叉查詢樹如下 :

10/\

1 11

\ \

6 12

可以返回二叉查詢樹的中序遍歷 [1, 6, 10, 11, 12]

樣例 2:

輸入:

輸出:[1,2,3]

解釋:二叉查詢樹如下 :

2 / \

1 3

可以返回二叉查詢樹的中序遍歷 [1,2,3]

【題解】

這是乙個非常通用的利用 stack 進行 binary tree iterator 的寫法。

stack 中儲存一路走到當前節點的所有節點,stack.peek() 一直指向 iterator 指向的當前節點。 因此判斷有沒有下乙個,只需要判斷 stack 是否為空 獲得下乙個值,只需要返回 stack.peek() 的值,並將 stack 進行相應的變化,挪到下乙個點。

如果當前點存在右子樹,那麼就是右子樹中「一路向西」最左邊的那個點

如果當前點不存在右子樹,則是走到當前點的路徑中,第乙個左拐的點

訪問所有節點用時o(n),所以均攤下來訪問每個節點的時間複雜度時o(1)

public

class

bstiterator

}//@return: true if there has next node, or false

public

boolean

hasnext

()//@return: return next node

public

treenode

next()}

else

}return

curt;}

}

更多題解參考:九章演算法

九章演算法 Google面試題 內積

描述 給定長度為n的a陣列,長度為k的b陣列 你可以從a陣列裡取k個數 規則如下 即每次可以從a陣列的最左邊或者最右邊取走乙個數,取走的數從陣列中移除 將取出的ai按取出的順序組成c陣列 求b與c的內積最大值 b與c內積為 i 0k 1bi ci 解釋1 a 1,4,3,2,5 b 1,2,3,4 ...

九章演算法 Google 面試題 解碼方法

有乙個訊息包含 a z 通過以下規則編碼 a 1 b 2 z 26 現在給你乙個加密過後的訊息,問有幾種解碼的方式 樣例 1 輸入 12 輸出 2 解釋 它可以被解碼為 ab 1 2 或 l 12 樣例 2 輸入 10 輸出 1 演算法 動態規劃 dp 演算法思路 思路 複雜度分析 n表示字串長度 ...

九章演算法 Google面試題 島嶼的個數II

給定 n,m,分別代表乙個二維矩陣的行數和列數,並給定乙個大小為 k 的二元陣列a.初始二維矩陣全0.二元陣列a內的k個元素代表k次操作,設第i個元素為 a i x,a i y 表示把二維矩陣中下標為a i x行a i y列的元素由海洋變為島嶼.問在每次操作之後,二維矩陣中島嶼的數量.你需要返回乙個...