/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
typedef struct TreeNode Node;
typedef struct {
Node **stack;
int index;
} BSTIterator;
int max_dep(Node *node, int depth){
int d1, d2;
if(!node) return 0;
d1 = max_dep(node->left, 0);
d2 = max_dep(node->right, 0);
return d1 > d2 ? (d1+1) : (d2+1);
}
BSTIterator* bSTIteratorCreate(struct TreeNode* root) {
BSTIterator *obj = (BSTIterator *)malloc(sizeof(BSTIterator));
Node *node = root;
if(root)
obj->stack = (Node **)malloc(sizeof(Node*) * max_dep(root, 0));
else
obj->stack = NULL;
obj->index = 0;
while(node){
obj->stack[(obj->index)++] = node;
node = node->left;
}
return obj;
}
/** @return the next smallest number */
int bSTIteratorNext(BSTIterator* obj) {
Node *node = NULL;
int ret = 0;
if(obj->index)
node = obj->stack[--(obj->index)];
ret = node->val;
node = node->right;
while(node){
obj->stack[(obj->index)++] = node;
node = node->left;
}
return ret;
}
/** @return whether we have a next smallest number */
bool bSTIteratorHasNext(BSTIterator* obj) {
if(obj->index) return true;
return false;
}
void bSTIteratorFree(BSTIterator* obj) {
if(obj->stack)
free(obj->stack);
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);
*/
LeetCode-173-二叉搜索树的迭代器-C语言
最新推荐文章于 2024-06-22 06:00:13 发布