設計實現乙個帶有下列屬性的二叉查詢樹的迭代器:
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列的元素由海洋變為島嶼.問在每次操作之後,二維矩陣中島嶼的數量.你需要返回乙個...