温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C++中怎么利用LeetCode实现二叉搜索树迭代器

发布时间:2021-08-03 10:42:29 来源:亿速云 阅读:175 作者:Leah 栏目:开发技术

C++中怎么利用LeetCode实现二叉搜索树迭代器,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

[LeetCode] 173.Binary Search Tree Iterator 二叉搜索树迭代器

Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the root node of a BST.

Calling next() will return the next smallest number in the BST.

Note: next() and hasNext() should run in average O(1) time and uses O(h) memory, where h is the height of the tree.

Credits:
Special thanks to @ts for adding this problem and creating all test cases.

这道题主要就是考二叉树的中序遍历的非递归形式,需要额外定义一个栈来辅助,二叉搜索树的建树规则就是左<根<右,用中序遍历即可从小到大取出所有节点。代码如下:

/**  * Definition for binary tree  * struct TreeNode {  *     int val;  *     TreeNode *left;  *     TreeNode *right;  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}  * };  */ class BSTIterator { public:     BSTIterator(TreeNode *root) {         while (root) {             s.push(root);             root = root->left;         }     }     /** @return whether we have a next smallest number */     bool hasNext() {         return !s.empty();     }     /** @return the next smallest number */     int next() {         TreeNode *n = s.top();         s.pop();         int res = n->val;         if (n->right) {             n = n->right;             while (n) {                 s.push(n);                 n = n->left;             }         }         return res;     } private:     stack<TreeNode*> s; }; /**  * Your BSTIterator will be called like this:  * BSTIterator i = BSTIterator(root);  * while (i.hasNext()) cout << i.next();  */

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI