173. 二叉搜索树迭代器
本人解答如下:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
//迭代
typedef struct {
//结构体
struct TreeNode* cur;
struct StackTreeNode* stk[128];
int stkSize;
} BSTIterator;
BSTIterator* bSTIteratorCreate(struct TreeNode* root) {
//创建新的存储节点
BSTIterator *ret = malloc(sizeof(BSTIterator));
ret -> cur = root;
ret -> stkSize = 0;
return ret;
}
int bSTIteratorNext(BSTIterator* obj) {
//左节点
while(obj -> cur != NULL) {
obj->stk[(obj->stkSize)++] = obj->cur;
obj->cur = obj->cur->left;
}
obj->cur = obj->stk[--(obj->stkSize)];
int ret = obj->cur->val;
//右节点
obj->cur = obj->cur->right;
return ret;
}
bool bSTIteratorHasNext(BSTIterator* obj) {
//obj->cur不是空和stkSize有值就是true,反之为false
return obj -> cur != NULL || obj -> stkSize;
}
void bSTIteratorFree(BSTIterator* obj) {
//释放
free(obj);
}
/**
* Your BSTIterator struct will be instantiated and called as such:
* BSTIterator* obj = bSTIteratorCreate(root);
* int param_1 = bSTIteratorNext(obj);
* bool param_2 = bSTIteratorHasNext(obj);
* bSTIteratorFree(obj);
*/