二叉树中序遍历(迭代)

原创 2015年07月11日 00:35:19

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.


/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
#include<stack>
using namespace std;
class BSTIterator {
    stack<TreeNode*> st;
    
public:
    BSTIterator(TreeNode *root) {
        if(root)
            putLeftChild(root);
        
    }

    /** @return whether we have a next smallest number */
    bool hasNext() {
        return !st.empty();        
    }

    /** @return the next smallest number */
    int next() {
        TreeNode* top = st.top();
        st.pop();
        if(top->right)
            putLeftChild(top->right);
        
        return top->val;        
    }
    
    void putLeftChild(TreeNode *root){
        while(root){
            st.push(root);
            root = root->left;
        }        
    }
};
/**
 * Your BSTIterator will be called like this:
 * BSTIterator i = BSTIterator(root);
 * while (i.hasNext()) cout << i.next();
 */


二叉树中序遍历的迭代版本

/*** 二叉树遍历的中序的迭代版本 * 需要stack 结构, cur变量的帮助 * 每个节点都作为左子树被压入栈,作为根被访问, * 再转入右子树做重复的处理 *...
  • ych_ding
  • ych_ding
  • 2014年07月16日 09:49
  • 1592

二叉树的前序、中序、后序遍历—迭代方法

leetcode上的相关题目: 前序:https://leetcode.com/problems/binary-tree-preorder-traversal/?tab=Description 中...
  • u011567017
  • u011567017
  • 2017年02月25日 11:35
  • 1007

二叉树前序,中序,后序遍历迭代实现详解

二叉树的遍历迭代实现 在上一篇文章中实现了二叉树,但是对于遍历仅仅是简单的用递归来进行了实现。在这篇文章中将给出迭代的实现版本以及分析过程。 首先给出我们要分析的二叉树实例: 前序遍历迭...
  • u014787113
  • u014787113
  • 2015年11月08日 13:05
  • 2056

Java迭代实现二叉树的前序、中序、后序遍历

我们都知道,二叉树的遍历有三种形式:前序遍历、中序遍历、后序遍历,三种遍历的规则分别如下: 1)前序遍历:先遍历根节点,然后遍历左子节点,最后遍历右子节点,简记为“根-左-右”; 2)中序遍历:先...
  • yangfeisc
  • yangfeisc
  • 2015年03月20日 21:06
  • 2217

非递归,不用栈实现二叉树中序遍历

最近总有人问这个问题:“如何不用栈,也不用递归来实现二叉树的中序遍历”。这个问题的实现就是迭代器问题,无论是Java还是C++,利用迭代器遍历树节点(Java中是TreeMap类,C++中是map类)...
  • mousebaby808
  • mousebaby808
  • 2013年12月01日 18:03
  • 5389

二叉树的中序遍历(lintcode)(递归和非递归)

题目来源:lintcode 原题链接:二叉树的中序遍历 题目: 给出一棵二叉树,返回其节点值的后序遍历。 您在真实的面试中是否遇到过这个题?  Yes 样例 给出一棵二叉树 ...
  • lyy_hit
  • lyy_hit
  • 2015年11月19日 22:04
  • 1150

二叉树中序遍历的三种方法

二叉树是一种重要的数据结构,对于二叉树的遍历也很重要。这里通过三种方法简单介绍一下二叉树的中序遍历。中序遍历就是先遍历二叉树的左子树,然后遍历根节点,最后遍历右子树。例如下面的二叉树,中序遍历的结果如...
  • u012877472
  • u012877472
  • 2015年10月25日 10:21
  • 19075

二叉树遍历之中序遍历(源代码)

二叉树的中序遍历 要点: 1.中序遍历左子树 2.访问根节点 3.中序遍历右子树 实例: 如图:中序遍历结果:DBEAFC 中序遍历的时间复杂度为:O(n)。 如果一棵二叉排序树的节点值是...
  • u013300049
  • u013300049
  • 2016年05月18日 11:22
  • 2913

分别根据前中序遍历和后中序遍历来推二叉树的结构

1、理论分析: 数据结构的基础知识中重要的一点就是能否根据两种不同遍历序列的组合(有三种:先序+中序,先序+后序,中序+后序),唯一的确定一棵二叉树。然后就是根据二叉树的不同遍历序列(先序、中序、后...
  • weixin_35909255
  • weixin_35909255
  • 2017年02月14日 01:21
  • 829

lintcode 二叉树的中序遍历

给出一棵二叉树,返回其中序遍历 题解参考   http://blog.csdn.net/workformywork/article/details/21628351?utm_source=tui...
  • Mabaoyan91
  • Mabaoyan91
  • 2015年12月05日 17:50
  • 470
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二叉树中序遍历(迭代)
举报原因:
原因补充:

(最多只允许输入30个字)