zoukankan      html  css  js  c++  java
  • 二叉树

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

      

  • 相关阅读:
    [JSOI2007][BZOJ1031] 字符加密Cipher|后缀数组
    leetcode Flatten Binary Tree to Linked List
    leetcode Pascal's Triangle
    leetcode Triangle
    leetcode Valid Palindrome
    leetcode Word Ladder
    leetcode Longest Consecutive Sequence
    leetcode Sum Root to Leaf Numbers
    leetcode Clone Graph
    leetcode Evaluate Reverse Polish Notation
  • 原文地址:https://www.cnblogs.com/sxy-798013203/p/6080840.html
Copyright © 2011-2022 走看看