输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。

来源:互联网 发布:中国古代史网络课答案 编辑:程序博客网 时间:2024/05/17 08:32

思路

可以借助队列来实现,因为队列的特性是先进先出。可以从根结点,左结点,右结点依次入队列。然后再逐一输队首结点的值,即实现层次遍历。

#include <iostream>#include <queue>using namespace std;//二叉树结构typedef struct BinaryTreeNode { char m_chValue; BinaryTreeNode *m_pLChild;BinaryTreeNode *m_pRChild;}BiTree;//层次遍历二叉树void LayerTranverse(BiTree *pTree){if (NULL == pTree){return ;}BiTree *pTemp = NULL;queue<BiTree*> q;q.push(pTree);while (!q.empty()){pTemp = q.front();q.pop();cout<<pTemp->m_chValue<<endl;//先左子树入队列if (NULL != pTemp->m_pLChild){q.push(pTemp->m_pLChild);}//再右子树入队列if (NULL != pTemp->m_pRChild){q.push(pTemp->m_pRChild);}}}//先序创建二叉树BiTree *CreateBiTree(BiTree *pTree = NULL){char ch;cin>>ch;if ('#' == ch){pTree = NULL;}else{pTree = new BiTree;pTree->m_chValue = ch;pTree->m_pLChild = CreateBiTree(pTree->m_pLChild);pTree->m_pRChild = CreateBiTree(pTree->m_pRChild);}return pTree;}//先序遍历二叉树void TraverseTree(BiTree *root){if (NULL != root){cout<<root->m_chValue<<endl;TraverseTree(root->m_pLChild);TraverseTree(root->m_pRChild);}}int main(){BiTree *root = NULL;root = CreateBiTree();//TraverseTree(root);cout<<"层次遍历"<<endl;LayerTranverse(root);return 1;}


原创粉丝点击