码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode#173 Binary Search Tree Iterator

时间:2015-01-27 07:00:41      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:

原题地址

 

普遍的做法是:用栈保存从根节点到当前尚未遍历过的最小节点的路径(栈顶始终是最小节点)

constructor:遍历至最小节点,同时将路径上出现的节点压栈保存

hasNext:返回栈里面是否还有元素

next:栈顶元素即为所求,弹栈的同时更新栈,使栈里始终保存的是从根节点到剩余未遍历节点的最小节点的路径

 

至于平均时间复杂度为什么是O(1),以后有机会再考虑吧。 

 

代码:

 1 class BSTIterator {
 2 public:
 3     stack<TreeNode *> st;
 4     
 5     BSTIterator(TreeNode *root) {
 6         pushLeft(root);
 7     }
 8 
 9     /** @return whether we have a next smallest number */
10     bool hasNext() {
11         return !st.empty();
12     }
13 
14     /** @return the next smallest number */
15     int next() {
16         if (!hasNext())
17             return -1;
18             
19         TreeNode *top = st.top();
20         st.pop();
21 
22         if (top->right)
23             pushLeft(top->right);
24         
25         return top->val;
26     }
27     
28     void pushLeft(TreeNode *root) {
29         while (root) {
30             st.push(root);
31             root = root->left;
32         }
33     }
34 };

 

Leetcode#173 Binary Search Tree Iterator

标签:

原文地址:http://www.cnblogs.com/boring09/p/4251790.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!