二叉查找树迭代器

设计实现一个带有下列属性的二叉查找树的迭代器:

  • 元素按照递增的顺序被访问(比如中序遍历)
  • next()hasNext()的询问操作要求均摊时间复杂度是O(1)
  • 样例

    对于下列二叉查找树,使用迭代器进行中序遍历的结果为 [1, 6, 10, 11, 12]

       10
     /    \
    1      11
     \       \
      6       12
    

    挑战

    额外空间复杂度是O(h),其中h是这棵树的高度

    Super Star:使用O(1)的额外空间复杂度

    /**
     * Definition of TreeNode:
     * class TreeNode {
     * public:
     *     int val;
     *     TreeNode *left, *right;
     *     TreeNode(int val) {
     *         this->val = val;
     *         this->left = this->right = NULL;
     *     }
     * }
     * Example of iterate a tree:
     * Solution iterator = Solution(root);
     * while (iterator.hasNext()) {
     *    TreeNode * node = iterator.next();
     *    do something for node
     */
    class Solution {
    public:
        //@param root: The root of binary tree.
        Solution(TreeNode *root) {
            // write your code here
            TreeNode *cur = root;
    		while (cur != NULL)
    		{
    			buf.push(cur);
    			cur = cur->left;
    		}
        }
    
        //@return: True if there has next node, or false
        bool hasNext() {
            // write your code here
            return buf.empty()? false : true;
        }
        
        //@return: return next node
        TreeNode* next() {
            // write your code here
            if (buf.empty())
    		{
    			return NULL;
    		}
    		TreeNode *top = buf.top();
    		buf.pop();
    		if (top->right)
    		{
    			TreeNode *cur = top->right;
    			buf.push(cur);
    			cur = cur->left;
    			while (cur)
    			{
    				buf.push(cur);
    				cur = cur->left;
    			}
    		}
    
    		return top;
        }
    private:
    	stack<TreeNode*> buf;
    };
    
    原文作者:二叉查找树
    原文地址: https://blog.csdn.net/brucehb/article/details/49208041
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞