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

来源:互联网 发布:手机淘宝主页图片尺寸 编辑:程序博客网 时间:2024/06/05 09:31

题目:层序遍历二叉树

给定一棵二叉树,要求层序遍历该二叉树,即从上到下按层次访问该树,每一层单独输出一行,每一层要求访问的顺序为从左到右。我们在遍历的过程中将该层节点的孩子节点压入一个队列,这样就可以实现从上到下一层一层地遍历该二叉树。
初始时,根结点入队列。
然后,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;}
原创粉丝点击