创建先序二叉树
#include<iostream> using namespace std; class BinTreeNode { public: char ch; BinTreeNode(int value){ch=value;} BinTreeNode *left,*right; }; BinTreeNode* create_tree() { char item; BinTreeNode *t,*t_l,*t_r; cin>>item; if(item!=‘#‘) { BinTreeNode *pTmpNode=new BinTreeNode(item); t=pTmpNode; t_l=create_tree(); t->left=t_l; t_r=create_tree(); t->right=(t_r); return t; } else { t=NULL; return t; } } void midsearch(BinTreeNode *root) { if(root!=NULL) cout<<(root->ch); else return ; midsearch(root->left); midsearch(root->right); } void leftsearch(BinTreeNode *root) { if(root==NULL) return ; leftsearch(root->left); cout<<(root->ch); leftsearch(root->right); } void rightsearch(BinTreeNode *root) { if(root==NULL) return ; rightsearch(root->left); rightsearch(root->right); cout<<(root->ch); } int main() { BinTreeNode *root=create_tree(); midsearch(root); //先序遍历 cout<<endl; leftsearch(root); //中序遍历 cout<<endl; rightsearch(root); //后序遍历 cout<<endl; return 0; }
创建层次遍历树
#include<iostream> #include<queue> using namespace std; class BinTreeNode { public: char ch; BinTreeNode(char value){ch=value;} BinTreeNode *left,*right; char get_data(); BinTreeNode* get_left(); BinTreeNode* get_right(); }; char BinTreeNode::get_data() { return ch; } BinTreeNode* BinTreeNode::get_left() { return left; } BinTreeNode* BinTreeNode::get_right() { return right; } BinTreeNode* level_create() { char data,data1,data2; BinTreeNode* r; cin>>data; if(data==‘#‘) return r; r=new BinTreeNode(data); deque<BinTreeNode*> q; q.push_back(r); while(!q.empty()) { BinTreeNode *p=q.front(); q.pop_front(); cin>>data1; if(data1!=‘#‘) { p->left=new BinTreeNode(data1); q.push_back(p->left); } cin>>data2; if(data2!=‘#‘) { p->right=new BinTreeNode(data2); q.push_back(p->right); } } return r; } void midsearch(BinTreeNode *root) { if(root!=NULL) cout<<(root->ch); else return ; midsearch(root->left); midsearch(root->right); } void leftsearch(BinTreeNode *root) { if(root==NULL) return ; leftsearch(root->left); cout<<(root->ch); leftsearch(root->right); } void rightsearch(BinTreeNode *root) { if(root==NULL) return ; rightsearch(root->left); rightsearch(root->right); cout<<(root->ch); } void level_order(BinTreeNode *r) { if(r==NULL) return ; deque<BinTreeNode*> q; q.push_back(r); while(!q.empty()) { BinTreeNode *p=q.front(); cout<<p->get_data()<<" "; q.pop_front(); if(p->get_left()!=NULL) { q.push_back(p->get_left()); } if(p->get_right()!=NULL) { q.push_back(p->get_right()); } } } int main() { BinTreeNode *root=level_create(); midsearch(root); //先序遍历 cout<<endl; leftsearch(root); //中序遍历 cout<<endl; rightsearch(root); //后序遍历 cout<<endl; level_order(root); //层次遍历 cout<<endl; return 0; }
以上两个程序都是根据已有的遍历结果来创建对应的树
时间: 2024-10-17 12:35:00