二叉树一些基本算法

来源:互联网 发布:esp8266 51单片机例程 编辑:程序博客网 时间:2024/04/28 10:53

一、二叉树存储结构及先序建立

-----二叉树的存储结构-----
typedef struct BiTNode{
    TElemType data;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

-----先序建立二叉链表-----
Status CreateBiTree(BiTree &T)
{
    char ch;
    scanf("%c",&ch);
    if(ch=='#')
        T==NULL;
    else
    {
            T=(BiTree)malloc(sizeof(BiTNode));
            if(!T)
            {
                printf("error");
                exit(0);
            }
            T->data=ch;
            CreateBiTree(T->lchild);
            CreateBiTree(T->rchild);
    }
    return ok;
}


二、二叉树三种递归遍历算法

-----二叉树先序遍历算法-----
void PreOrder(BiTree &T)
{
    if(T!=NULL){
        cout<<T->data<<endl;
        PreOrder(T->lchild);
        PreOrder(T->rchild);
    }
}

-----二叉树中序遍历算法-----
void InOrder(BiTree &T)
{
    if(T!=NULL){
        InOrder(T->lchild);
        cout<<T->data<<endl;
        InOrder(T->rchild);
    }
}

-----二叉树后序遍历算法-----
void PostOrder(BiTree &T)
{
    if(T!=NULL){
        PostOrder(T->lchild);
        PostOrder(T->rchild);
        cout<<T->data<<endl;
    }
}



三、求二叉树深度递归算法

int depth(BiTree root)
{
    int ldepth,rdepth;
    if(!root)
      return 0;
    else
    {
      ldepth=depth(root->lchild);
      rdepth=depth(root->rchild);
      return ldepth>rdepth?ldepth+1:rdepth+1;
    }
}



四、求二叉树叶子节点数

int CountLeaf(BiTree t)
{
    int m,n;
    if(!T)
      return 0;
    if(!T->lchild&&!T->rchild)
      return 1;
    else{
      m=CountLeaf(T->lchild);
      n=CountLeaf(T->rchild);
      return m+n;
    }
}



五、子树交换

void Exchange(BiTree T)
{
    BiTree p;
    if(T){
      p=T->lchild;
      T->lchild=T->rchild;
      T->rchild=p;
    Exchange(T->lchild);
    Exchange(T->rchild);
    }
}




0 0
原创粉丝点击