leetcode刷題筆記一百七十三題 二叉搜尋樹迭代器
阿新 • • 發佈:2020-09-09
leetcode刷題筆記一百七十三題 二叉搜尋樹迭代器
源地址:173. 二叉搜尋樹迭代器
問題描述:
實現一個二叉搜尋樹迭代器。你將使用二叉搜尋樹的根節點初始化迭代器。
呼叫 next() 將返回二叉搜尋樹中的下一個最小的數。
示例:
BSTIterator iterator = new BSTIterator(root);
iterator.next(); // 返回 3
iterator.next(); // 返回 7
iterator.hasNext(); // 返回 true
iterator.next(); // 返回 9
iterator.hasNext(); // 返回 true
iterator.next(); // 返回 15
iterator.hasNext(); // 返回 true
iterator.next(); // 返回 20
iterator.hasNext(); // 返回 false提示:
next() 和 hasNext() 操作的時間複雜度是 O(1),並使用 O(h) 記憶體,其中 h 是樹的高度。
你可以假設 next() 呼叫總是有效的,也就是說,當呼叫 next() 時,BST 中至少存在一個下一個最小的數。
//通過定義棧,以中序遍歷逆次序壓入棧,隨著函式呼叫進行彈棧即可 /** * Definition for a binary tree node. * class TreeNode(var _value: Int) { * var value: Int = _value * var left: TreeNode = null * var right: TreeNode = null * } */ class BSTIterator(_root: TreeNode) { import scala.collection.mutable val stack = mutable.Stack.empty[TreeNode] inorder(_root) def inorder(root: TreeNode): Unit = { if (root == null) return inorder(root.right) stack.push(root) inorder(root.left) } /** @return the next smallest number */ def next(): Int = { return stack.pop.value } /** @return whether we have a next smallest number */ def hasNext(): Boolean = { return stack.nonEmpty } } /** * Your BSTIterator object will be instantiated and called as such: * var obj = new BSTIterator(root) * var param_1 = obj.next() * var param_2 = obj.hasNext() */