65,186
社区成员




#include<iostream>
using namespace std;
typedef struct BiTNode
{
char data;
struct BiTNode* lchild, * rchild;
}BiTNode, * BiTree;
void InitBiTree(BiTree& T)
{
char c;
cin >> c;
if (c == '#')
T = NULL;
else{
T = new BiTNode;
T->data = c;
InitBiTree(T->lchild);
InitBiTree(T->rchild);
}
}
void PreOrderTravel1(BiTree T)
{
if (T){
cout << T->data;
PreOrderTravel1(T->lchild);
PreOrderTravel1(T->rchild);
}
}
//中序
void InOrderTravel1(BiTree T)
{
if (T){
InOrderTravel1(T->lchild);
cout << T->data;
InOrderTravel1(T->rchild);
}
}
//后序
void TailOrderTravel1(BiTree T)
{
if (T){
TailOrderTravel1(T->lchild);
TailOrderTravel1(T->rchild);
cout << T->data;
}
}
//栈
typedef struct
{
BiTNode* stack[1000];
int top;
}SqStack;
void InitStack(SqStack& S)
{
S.top = -1;
}
int StackEmpty(SqStack S)
{
if (S.top == -1)
return 1;
else
return 0;
}
void Push(SqStack& S, BiTNode* e)
{
S.top++;
S.stack[S.top] = e;
}
BiTree Pop(SqStack& S)//void Pop(SqStack& S, BiTNode* e)
{
BiTree e = S.stack[S.top];
S.top--;
return e;
}
//非递归 中序遍历
void InOrderTravel2(BiTree T)
{
SqStack S;
InitStack(S);
BiTree p = T;
//BiTNode* q=new BiTNode;
while (p || !StackEmpty(S)){
if (p){
Push(S, p);
p = p->lchild;
}else{
p=Pop(S);
cout << p->data;
p = p->rchild;
}
}
}
//复制
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);
}
}
//深度
int Depth(BiTree T)
{
int m, n;
if (T == NULL)
return 0;
else{
m = Depth(T->lchild);
n = Depth(T->rchild);
if (m > n)
return (m + 1);
else
return (n + 1);
}
}
int main()
{
BiTree T;
cout << "请输入建立二叉链表的序列:\n";
InitBiTree(T);
cout << "先序遍历结果为:\n";
PreOrderTravel1(T);
cout << "\n";
cout << "中序遍历结果为:\n";
InOrderTravel1(T);
cout << "\n";
cout << "中序遍历结果为(非递归):\n";
InOrderTravel2(T);
cout << "\n";
cout << "后序遍历结果为:\n";
TailOrderTravel1(T);
cout << "\n";
BiTree newT;
Copy(T, newT);
cout << "复制得到的新树先序遍历结果为:\n";
PreOrderTravel1(newT);
cout << "\n";
cout << "制得到的新树中序遍历结果为:\n";
InOrderTravel1(newT);
cout << "\n";
cout << "制得到的新树后序遍历结果为:\n";
TailOrderTravel1(newT);
cout << "\n";
cout << "树的深度为:\n";
cout << Depth(T);
return 0;
}
//请输入建立二叉链表的序列:
//abc##de#f##g###
//先序遍历结果为:
//abcdefg
//中序遍历结果为:
//cbefdga
//中序遍历结果为(非递归):
//cbefdga
//后序遍历结果为:
//cfegdba
//复制得到的新树先序遍历结果为:
//abcdefg
//制得到的新树中序遍历结果为:
//cbefdga
//制得到的新树后序遍历结果为:
//cfegdba
//树的深度为:
//5请按任意键继续. . .