数据结构 笔记:二叉树结构的层次遍历

二叉树的遍历

-二叉树的遍历(Traversing Binay Tree)是指从根节点触发,按照某种次序一次访问二叉树中的所有结点,使得每个结点被访问一次,且仅被访问一次。

通用树结构的层次遍历算法是否可以用在二叉树结构上?

如果可以,代码需要做怎样的改动?

提供一组遍历相关的函数,按层次访问二叉树中的数据元素。

函数功能说明
begin()初始化,准备进行遍历访问
next()移动游标,指向下一个结点
current()获取游标所指向的数据元素
end()判断游标是否到达尾部

层次遍历算法

-原谅:class LinkQueue<T>;

-游标:LInkQueue<T>::front();

-思想:

·begin() -> 将根节点压入队列中

·current()->访问队头元素指向的数据元素

·next()->队头元素弹出,将队头元素的孩子压入队列中(核心)

·end()->判断队列是否为空

层次遍历算法示例

函数调用队列状态出队结点
begin()1 
next()2,31
next()4,5,6,73
next()5,6,7,8,94
next()6,7,8,9,105
next()7,8,9,106
next()8,9,107
next()9,108
.........
bool begin()
    {
        bool ret = (root()!= NULL);

        if(ret)
        {
            m_queue.clear();
            m_queue.add(root());
        }

        return ret;
    }

    bool end()
    {
        return (m_queue.length() == 0);
    }

    bool next()
    {
        bool ret = (m_queue.length() > 0);

        if(ret)
        {
            BTreeNode<T>* node = m_queue.front();

            m_queue.remove();

            if(node->left != NULL)
            {
                m_queue.add(node->left);
            }

            if(node->right != NULL)
            {
                m_queue.add(node->right);
            }
        }

        return ret;
    }

    T current()
    {
        if(!end())
        {
            return m_queue.front()->value;
        }
        else
        {
            //抛出异常
        }
    }

for(bt.begin();!bt.end();bt.next())
    {
        cout << bt.current() << " ";
    }

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值