博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode]173.Binary Search Tree Iterator
阅读量:6276 次
发布时间:2019-06-22

本文共 3169 字,大约阅读时间需要 10 分钟。

【题目】

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.

【分析】

中序遍历

【代码】

/**********************************   日期:2015-01-03*   作者:SJF0115*   题目: 173.Binary Search Tree Iterator*   来源:https://oj.leetcode.com/problems/binary-search-tree-iterator/*   结果:AC*   来源:LeetCode*   博客:**********************************/#include 
#include
#include
using namespace std;// 二叉查找树节点struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};// 插入void TreeInsert(TreeNode*& root,int val){ // 创建新节点 TreeNode* node = new TreeNode(val); // 空树 if(root == NULL){ root = node; return; }//if TreeNode *pre = NULL; TreeNode *p = root; // 寻找插入位置 while(p){ // 父节点 pre = p; // 沿左子树方向下降 if(val < p->val){ p = p->left; }//if // 沿右子树方向下降 else{ p = p->right; }//else }//while // 左子结点处插入 if(val < pre->val){ pre->left = node; }//if // 右子结点处插入 else{ pre->right = node; }//else}// 创建二叉查找树TreeNode* TreeCreate(vector
num){ TreeNode *root = NULL; int len = num.size(); if(len == 0){ return root; }//if for(int i = 0;i < len;i++){ TreeInsert(root,num[i]); }//for return root;}class BSTIterator {public: BSTIterator(TreeNode *root) { TreeNode *p = root; // 沿左子树下降 while(p){ s.push(p); p = p->left; }//while } /** @return whether we have a next smallest number */ bool hasNext() { if(!s.empty()){ return true; }//if return false; } /** @return the next smallest number */ int next() { TreeNode *p = NULL; // 出栈 p = s.top(); s.pop(); int val = p->val; // 转向右子树 if(p->right){ p = p->right; // 沿左子树下降 while(p){ s.push(p); p = p->left; }//while }//if return val; }private: stack
s;};int main() { // -1代表NULL vector
num = {8,3,1,10,6,14,4,7,13}; TreeNode *root = TreeCreate(num); BSTIterator bSTIterator = BSTIterator(root); while(bSTIterator.hasNext()){ cout<
<

【代码二】

class BSTIterator {    stack
myStack;public: BSTIterator(TreeNode *root) { pushAll(root); } /** @return whether we have a next smallest number */ bool hasNext() { return !myStack.empty(); } /** @return the next smallest number */ int next() { TreeNode *tmpNode = myStack.top(); myStack.pop(); pushAll(tmpNode->right); return tmpNode->val; }private: void pushAll(TreeNode *node) { for (; node != NULL; myStack.push(node), node = node->left); }};

你可能感兴趣的文章
ArcGIS Engine 符号自动化配置工具实现
查看>>
小程序 · 跳转带参数写法,兼容url的出错
查看>>
开源干货!!!.NET Core + Vue.js(iview-admin) 通用动态权限(RBAC)管理系统框架[DncZeus]开源啦!!!...
查看>>
flutter error
查看>>
Flask框架从入门到精通之模型数据库配置(十一)
查看>>
10年重新出发
查看>>
2019年-年终总结
查看>>
聊聊elasticsearch的RoutingService
查看>>
让人抓头的Java并发(一) 轻松认识多线程
查看>>
从源码剖析useState的执行过程
查看>>
地包天如何矫正?
查看>>
中间件
查看>>
Android SharedPreferences
查看>>
算法与数据结构1800题 图
查看>>
css面试题
查看>>
Vue组建通信
查看>>
用CSS画一个带阴影的三角形
查看>>
前端Vue:函数式组件
查看>>
程鑫峰:1.26特朗.普力挺美元力挽狂澜,伦敦金行情分析
查看>>
safari下video标签无法播放视频的问题
查看>>