173. 二叉搜尋樹迭代器
阿新 • • 發佈:2020-07-22
實現一個二叉搜尋樹迭代器。你將使用二叉搜尋樹的根節點初始化迭代器。
呼叫 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 中至少存在一個下一個最小的數。
解題思路:
很簡單符合取值O(1),並使用O(h) 記憶體的,基本上可以猜測是陣列。那接下來就是閉門造車。思路來了擋都擋不住。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class BSTIterator { private List<Integer> list; private int index = 0; public BSTIterator(TreeNode root) { list = new ArrayList<>(); midTraver(root); } /** @return the next smallest number */ public int next() { return list.get(index++); } /** @return whether we have a next smallest number */ public boolean hasNext() { return index <= (list.size() - 1); } private void midTraver(TreeNode root) { if(root != null) { midTraver(root.left); list.add(root.val); midTraver(root.right); } } } /** * Your BSTIterator object will be instantiated and called as such: * BSTIterator obj = new BSTIterator(root); * int param_1 = obj.next(); * boolean param_2 = obj.hasNext(); */
來源:力扣(LeetCode) 連結:https://leetcode-cn.com/problems/binary-search-tree-iterator 著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。