#include#include #include #include #include #include using namespace std; typedef struct BitNode{ char data; struct BitNode *lchild, *rchild; }BitNode,*BiTree; void InOrderTraverse(BiTree T){ //中序遍历 if(!T) return; InOrderTraverse(T->lchild); cout << T->data; InOrderTraverse(T->rchild); return; } vector In(BiTree T){ vector v; if (!T) return v; stack s; while (T||!s.empty()){ while (T){ s.push(T); T = T->lchild; } T = s.top(); s.pop(); //cout << 123 << endl; v.push_back(T->data); T = T->rchild; } return v; } vector first(BiTree T){ vector v; if(!T) return v; stack s; while(T||!s.empty()){ while(T){ v.push_back(T->data); s.push(T); T = T->lchild; } T = s.top(); s.pop(); T = T->rchild; } return v; } vector after(BiTree T){ vector v; if(!T) return v; stack s; while(T||!s.empty()){ while(T){ s.push(T); v.push_back(T->data); T = T->rchild; } T = s.top(); s.pop(); T = T->lchild; } reverse(v.begin(), v.end()); return v; } void CreatBitTree(BiTree &T){ cout << "请输入数据从根节点开始输入空节点输入#,数据和数据之间用空格隔开按照先序遍历输入,构成满二叉树才行!例如1 2 # # 3 # #" << endl; char ch; cin >> ch; if(ch=='#') T = NULL; else { T = new BitNode; T->data = ch; CreatBitTree(T->lchild); CreatBitTree(T->rchild); } return; } int Depth(BiTree T){ if(T==NULL) return 0; else { int m = Depth(T->lchild); int n = Depth(T->rchild); if(m>n) return m + 1; return n + 1; } } void Copy(BiTree T,BiTree &NewT){ if(T==NULL){ NewT = NULL; return; } else { NewT = new BitNode; NewT->data = T->data; Copy(T->lchild, NewT->lchild); Copy(T->rchild, NewT->rchild); } return; } int main() { vector v; BitNode *t; CreatBitTree(t); v=In(t); int n = v.size(); cout << "中序遍历序列为:"; for (int i = 0; i < n;i++) cout << v[i] << " n"[i == n - 1]; v.clear(); v=first(t); n = v.size(); cout << "先序遍历序列为"; for (int i = 0; i < n;i++) cout << v[i] << " n"[i == n - 1]; v.clear(); v = after(t); n = v.size(); cout << "后序遍历序列为"; for (int i = 0; i < n;i++) cout << v[i] << " n"[i == n - 1]; return 0; }



