实现一颗二叉树的层序遍历【每日一题】

题目:层序遍历二叉树

给定一棵二叉树,要求层序遍历该二叉树,即从上到下按层次访问该树,每一层单独输出一行,每一层要求访问的顺序为从左到右。我们在遍历的过程中将该层节点的孩子节点压入一个队列,这样就可以实现从上到下一层一层地遍历该二叉树。
初始时,根结点入队列。
然后,while循环判断队列不空时,弹出一个结点,访问它,并把它的所有孩子结点入队列。

template<class T>
struct BinaryTreeNode
{
    BinaryTreeNode(const T& data)
        :_data(data)
        ,_pLeft(NULL)
        ,_pRight(NULL)
    {}

    T _data;
    BinaryTreeNode<T>* _pLeft;
    BinaryTreeNode<T>* _pRight;
};
template<class T> class BinaryTree
{
    typedef BinaryTreeNode<T> Node;
public:
    BinaryTree()
        :_pRoot(NULL)
    {}
    BinaryTree(const T array[],size_t size,const T& invalid)
    {
        size_t index = 0;
        _CreateTree(_pRoot,array,size,index,invalid);
    }
    void LevelOrder()
    {
        cout<<"层序遍历二叉树:"<<endl;
        queue<Node*> q;
        Node* pCur = NULL;
        if(NULL != _pRoot)
        {
            q.push(_pRoot);
            while(!q.empty())
            {
                pCur = q.front();
                cout<<pCur->_data <<" ";
                if(pCur->_pLeft )
                    q.push(pCur->_pLeft );
                if(pCur->_pRight )
                    q.push(pCur->_pRight );
                q.pop();
            }
        }
        cout<<endl;
    }
private:
    void _CreateTree(Node*& pRoot,const T array[],size_t size,size_t& index, const T& invalid)
    {
        if(index < size && array[index ]!= invalid)
        {
            pRoot = new Node(array[index]);
            _CreateTree(pRoot->_pLeft ,array,size,++index,invalid);
            _CreateTree(pRoot->_pRight ,array,size,++index,invalid);
        }
    }
private:
    Node* _pRoot;
};
int main()
{
    char *str = "124###35##6";
    BinaryTree<char> t(str,strlen(str),'#');
    t.LevelOrder ();
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值