두 그루 의 이 진 트 리 가 비슷 한 지, 그리고 좌우 서브 트 리 의 교환, 차원 번 호 를 판정 합 니 다.

#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     ;" <

좋은 웹페이지 즐겨찾기