• 二叉树


    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    #include<malloc.h>
    #include<math.h>
    using namespace std;
    #define MAXSIZE 100
    #define OK 1
    typedef int Ststus ;
    typedef  char  TElemType  ;
    typedef struct BiThrNode
    {
        TElemType data;
        struct BiThrNode *lchild,*rchild;
    }BiThrNode,*BiTree;
    //先序建立
    void CreateBiTree(BiTree &T)
    {
        char ch;
        scanf("%c",&ch);
        T=new BiThrNode;
        if(ch=='#') T=NULL;
        else
        {
            T->data=ch;
            CreateBiTree(T->lchild);
            CreateBiTree(T->rchild);
        }
        return ;
    }
    //先序遍历
    void PreOrder(BiTree T)
    {
        if(T)
        {
            cout<<T->data<<" ";
            PreOrder(T->lchild);
            PreOrder(T->rchild);
        }
        else return;
    
    }
    //中序遍历
    void InOrder(BiTree T)
    {
        if(T)
        {
            InOrder(T->lchild);
            cout<<T->data<<" ";
            InOrder(T->rchild);
        }
        else return ;
    }
    //后序遍历
    void PostOrder(BiTree T)
    {
        if(T)
        {
            PostOrder(T->lchild);
            PostOrder(T->rchild);
            cout<<T->data<<" ";
        }
        else
           return ;
    }
    
    void ClearBiTree(BiTree *T)
    {
        if(*T)
        {
          if((*T)->lchild)ClearBiTree(&(*T)->lchild);
          if((*T)->rchild)ClearBiTree(&(*T)->rchild);
          free(T);//%%
          (*T)=NULL;
        }
    }
    //判断树是否为空
    int IsEmpty(BiTree T)
    {
        if(T)return 0;
        else return 1;
    }
    //计算树的深度
    int GetDepth(BiTree T)
    {
        int l=0,r=0;
        if(T->lchild)
        l=GetDepth(T->lchild);
        else l=0;
        if(T->rchild)
        r=GetDepth(T->rchild);
        else r=0;
        return max(r,l)+1;
    }
    //查询根节点
    TElemType GetRoot(BiTree T)
    {
        if(IsEmpty(T))
            return NULL;
        else
            return T->data;
    }
    //交换左右子树
    void Exchange(BiTree T)
    {
        BiTree temp = NULL;
        if(T->lchild == NULL && T->rchild == NULL)
            return;
        else
        {
            temp = T->lchild;
            T->lchild = T->rchild;
            T->rchild = temp;
        }
        if(T->lchild)
            Exchange(T->lchild);
        if(T->rchild)
            Exchange(T->rchild);
    }
    
    int main()
    {
       BiTree  T;
       CreateBiTree(T);
       cout<<"先序遍历"<<endl;
       PreOrder(T);
       cout<<"中序遍历"<<endl;
       InOrder(T);
       cout<<"后序遍历"<<endl;
       PostOrder(T);
        cout<<"树的深度:"<<GetDepth(T)<<endl;
        cout<<"树的根节点:"<<GetRoot(T)<<endl;
        if(IsEmpty(T))
       cout<<"空"<<endl;
       else cout<<"非空"<<endl;
       Exchange(T);
       PreOrder(T);ClearBiTree(&T);
       if(IsEmpty(T))
       cout<<"空"<<endl;
       else cout<<"非空"<<endl;
    }
    

      

  • 相关阅读:
    *** mixed implicit and normal rules: deprecated syntax
    cold boot and warm boot.
    git打补丁命令
    LSB和MSB
    __attribute__((weak)) ------ 关于弱符号的用法
    键盘和鼠标无法热插拔问题
    yocto编译加速及单独编译内核与uboot
    V4L2学习教程
    linux错误码
    linux内核面试常见试题
  • 原文地址:https://www.cnblogs.com/sxy-798013203/p/6080840.html
Copyright © 2020-2023  润新知