두 그루 의 이 진 트 리 가 비슷 한 지, 그리고 좌우 서브 트 리 의 교환, 차원 번 호 를 판정 합 니 다.
2961 단어 데이터 구조 상의
#include
using namespace std;
#include
#include
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define MAX_TREE_SIZE 100//
typedef char ElemType;
typedef int Status;
typedef struct BiTNode{
ElemType data;
struct BiTNode *lchild,*rchild;//
}BiTNode,*BiTree;// ,
int count=0;//CountLeaf
BiTree CreateBiTree(BiTree &T)//
{// ( ),#
// T
char ch;
scanf("%c",&ch);
if(ch=='#')
T = NULL;//( )
else
{
if(!(T = (BiTNode *)malloc(sizeof(BiTNode))))//
exit(OVERFLOW);
T -> data = ch;//
CreateBiTree(T->lchild);//
CreateBiTree(T->rchild);//
}
return T;
}
Status InorderTraverse(BiTree T)// ,
{
if(T==NULL)
{
return ERROR;
}
else
{
InorderTraverse(T->lchild);//
printf("%c",T->data);
InorderTraverse(T->rchild);//
}
return OK;
}
int Depth(BiTree T)//
{
int depthval,depthleft,depthright;
if(!T)
depthval = 0;
else
{
depthleft = Depth(T->lchild);//
depthright = Depth(T->rchild);//
depthval = 1 + (depthleft > depthright ? depthleft : depthright);
}
return depthval;
}
int CountLeaf(BiTree T)// count
{
if(T)
{
if((!T->lchild)&&(!T->rchild))
{
count++;
}
else
{
CountLeaf(T->lchild);
CountLeaf(T->rchild);
}
}
return count;
}
void Exchange(BiTree T)
{
BiTree p;
if(T)
{
p=T->lchild;
T->lchild=T->rchild;
T->rchild=p;
Exchange(T->lchild);
Exchange(T->rchild);
}
}
Status Like(BiTree T1,BiTree T2)
{
if((T1==NULL)&&(T2==NULL))
return TRUE;
else if((T1==NULL)||(T2==NULL))
return FALSE;
else
return (Like(T1->lchild,T2->lchild)) && (Like(T1->rchild,T2->rchild));
}
PreOrder(BiTree T,int i)
{
if(T)
{
T->data = 1;
PreOrder(T->lchild,i+1);
PreOrder(T->rchild,i+1);
cout<lchild)&&(!T->rchild))
count++;
CountLeaf(T->lchild,count);
CountLeaf(T->rchild,count);
}
}*/
int main()
{
BiTree T,T1,T2;
int t,i;
cout << " T ;" << endl;
CreateBiTree(T);
getchar();
cout << " T ;" <