免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2074 | 回复: 2
打印 上一主题 下一主题

[算法] 不使用栈非递归中序遍历二叉树该怎么做? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-15 21:48 |只看该作者 |倒序浏览
算法导论中有一个题目,12.1-3,要求用非递归算法执行中序树遍历。根据提示我花了很长很长的时间才写出用栈作为辅助手段的代码。上面提示所说的第二种算法我却没想出来。谁能提示一下。。

template < typename T >
class Item {
    public:
        Item (T v) :value(v),lchild(NULL),rchild(NULL){}
    public:
        T value;
        Item *lchild;
        Item *rchild;
};


template < typename T >
void inorder_nonrecur ( Item<T> *root ) {

    bool add_rchild = true;
    std::stack<Item<T>* > parents;

    parents.push ( root );
    while ( !parents.empty() ) {
        Item<T> *pos = parents.top();
        while ( pos ) {
            if ( pos->lchild != NULL && add_rchild ) {
                parents.push ( pos->lchild );
            }
            pos = pos->lchild;
        }
        if ( !parents.empty() )  {
            pos = parents.top();
            parents.pop();
            add_rchild = false;
            printf ( "%d ", pos->value );
            if ( pos->rchild != NULL ) {
                parents.push ( pos->rchild );
                add_rchild = true;
            }
        }
    }
    return ;
}

论坛徽章:
0
2 [报告]
发表于 2009-03-15 21:59 |只看该作者
网上找到一份资料:
http://download.csdn.net/source/460388

论坛徽章:
0
3 [报告]
发表于 2009-03-15 22:08 |只看该作者
谢谢,我已经下载下来了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP