【练习】输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印
/************************************************************************/ /* 题目:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。 例如输入 8 / \ 6 10 /\ /\ 5 7 9 11 输出8 6 10 5 7 9 11。 思路: 广度优先遍历 deque(STL)*/ /************************************************************************/ #include <iostream> #include <deque> using namespace std; struct BTree { BTree* pLeft; BTree* pRight; int value; }; void InsertBTree(BTree* &pRoot,int n) { if(!pRoot) { pRoot=new BTree; pRoot->pLeft=NULL; pRoot->pRight=NULL; pRoot->value=n; } else { if (n>pRoot->value) { InsertBTree(pRoot->pRight,n); } if (n<pRoot->value) { InsertBTree(pRoot->pLeft,n); } if (n==pRoot->value) { cout<<"repeated insertion"<<endl; } } } void VisitByLevel(BTree* pRoot) { if (!pRoot) { return; } deque<BTree*> BTDeque; BTDeque.push_back(pRoot); while(BTDeque.size()) { BTree* p=BTDeque.front(); cout<<p->value<<"\t"; BTDeque.pop_front(); if (p->pLeft) { BTDeque.push_back(p->pLeft); } if (p->pRight) { BTDeque.push_back(p->pRight); } } } int main() { BTree* pRoot=NULL; InsertBTree(pRoot,8); InsertBTree(pRoot,6); InsertBTree(pRoot,10); InsertBTree(pRoot,5); InsertBTree(pRoot,7); InsertBTree(pRoot,9); InsertBTree(pRoot,11); VisitByLevel(pRoot); return 0; }