1. 程式人生 > >二叉樹的構建,遍歷等基本操作

二叉樹的構建,遍歷等基本操作

#include"stdio.h"
#include"stdlib.h"
#include"string.h"
typedef struct BTNode
{
        char data;
     struct BTNode *lchild,*rchild;
}BTNode;
void  CreateBTNode(BTNode *&T);//構建二叉樹 
void  PreBTNode(BTNode *T);//先序遍歷二叉樹
void  InBTNode(BTNode *T);//中序遍歷二叉樹
void  PostBTNode(BTNode *T);//後序遍歷二叉樹
int   DepthBTNode(BTNode *T);//二叉樹深度
int   LeafBTNode(BTNode *T);//葉子節點數  
int main()
{
    BTNode *T;
    printf("-----------構造二叉樹----------\n");
    CreateBTNode(T);
    printf("\n---------先序遍歷二叉樹-------\n");
    PreBTNode(T);
    printf("\n---------中序遍歷二叉樹-------\n");
    InBTNode(T);
    printf("\n---------後序遍歷二叉樹-------\n");
    PostBTNode(T);
    printf("\n--------求二叉樹深度-------\n");
    printf("%d\n",DepthBTNode(T));
    printf("\n--------求葉子節點數-------\n");
    printf("%d\n",LeafBTNode(T)); 
    system("pause");
    return 0;

//構建二叉樹
void  CreateBTNode(BTNode *&T)
{
      
      char ch;
      scanf("%c",&ch);
      if(ch=='#')
      T=NULL;
      else
      {
          T=(BTNode *)malloc(sizeof(BTNode));
          T->data=ch;
          CreateBTNode(T->lchild);
          CreateBTNode(T->rchild); 
      }
}
//先序遍歷二叉樹
void  PreBTNode(BTNode *T)
{
      if(T!=NULL)
      {
      printf("%c\t",T->data);
      PreBTNode(T->lchild);
      PreBTNode(T->rchild);
      }
}
//中序遍歷二叉樹
void  InBTNode(BTNode *T)
{
      if(T!=NULL)
      {
      InBTNode(T->lchild);
      printf("%c\t",T->data);
      InBTNode(T->rchild);
      }
}
//後序遍歷二叉樹
void  PostBTNode(BTNode *T)
{
      if(T!=NULL)
      {
      
      PostBTNode(T->lchild);
      PostBTNode(T->rchild);
      printf("%c\t",T->data);
      }
}
//二叉樹深度
int   DepthBTNode(BTNode *T)
{     int left,right;
      if(T==NULL)
        return 0;
      else
      {
          left= DepthBTNode(T->lchild);
          right=DepthBTNode(T->rchild); 
          return (left>right?left:right+1); 
      }
}
      
      


//葉子節點數
int   LeafBTNode(BTNode *T)
{
      
    static  int count=0;
      if(T!=NULL)
      {
      if(T->lchild==NULL&&T->rchild==NULL)
        count++;
      LeafBTNode(T->lchild);
      LeafBTNode(T->rchild);
      }
return  count;
}