#include<stdio.h>
#include<iostream>
#include<stdlib.h>
#include<stack>
#include <algorithm>
#include<vector>
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<char> In(BiTree T){
vector<char> v;
if (!T)
return v;
stack<BiTree> 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<char> first(BiTree T){
vector<char> v;
if(!T)
return v;
stack<BiTree> 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<char> after(BiTree T){
vector<char> v;
if(!T)
return v;
stack<BiTree> 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<char> 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;
}
二叉树先序、中序、后序遍历
最新推荐文章于 2024-05-26 14:39:41 发布