#include <iostream> #include <deque> using namespace std; struct BTree { BTree* pLeft; BTree* pRight; int value; }; void AddNode(BTree* &pCurrent,int values); void PreOrderTraversal(BTree* root); void InOrderTraversal(BTree* root); void PostOrderTraversal(BTree* root); void LevelTraversal(BTree* root); int main() { BTree* root=NULL; AddNode(root,10); AddNode(root,15); AddNode(root,8); AddNode(root,3); AddNode(root,13); AddNode(root,9); AddNode(root,18); AddNode(root,16); cout<<"先根遍历:"<<endl; PreOrderTraversal(root); cout<<endl<<endl<<"中根遍历:"<<endl; InOrderTraversal(root); cout<<endl<<endl<<"后根遍历:"<<endl; PostOrderTraversal(root); cout<<endl<<endl<<"按层遍历:"<<endl; LevelTraversal(root); cout<<endl; system("pause"); return 0; } void AddNode(BTree* &pCurrent,int value) { if(!pCurrent) { BTree* p=new BTree; p->pLeft=NULL; p->pRight=NULL; p->value=value; pCurrent=p; } else { if(value>pCurrent->value) AddNode(pCurrent->pRight,value); else if(value<pCurrent->value) AddNode(pCurrent->pLeft,value); else cout<<"重复插入节点!"<<endl; } } void PreOrderTraversal(BTree* root) { if(!root) return ; cout<<root->value<<"/t"; PreOrderTraversal(root->pLeft); PreOrderTraversal(root->pRight); } void InOrderTraversal(BTree* root) { if(!root) return ; InOrderTraversal(root->pLeft); cout<<root->value<<"/t"; InOrderTraversal(root->pRight); } void PostOrderTraversal(BTree* root) { if(!root) return ; PostOrderTraversal(root->pLeft); PostOrderTraversal(root->pRight); cout<<root->value<<"/t"; } void LevelTraversal(BTree* root) { BTree* pTemp=NULL; deque<BTree*> treeDeque; if(!root) return ; else { treeDeque.push_back(root); while(treeDeque.size()) { pTemp=treeDeque.front(); treeDeque.pop_front(); cout<<pTemp->value<<"/t"; if(pTemp->pLeft) treeDeque.push_back(pTemp->pLeft); if(pTemp->pRight) treeDeque.push_back(pTemp->pRight); } } }