C語言二叉樹創建、遍歷、深度、葉子節點

#include 
#include 
#include 

typedef	int	ElemType;			//數據類型
typedef	int		Status;			//返回值類型

//定義二叉樹結構
typedef struct BiTNode{
  ElemType	data;					//數據域
  struct BiTNode	*lChild, *rChlid;	//左右子樹域
}BiTNode, *BiTree;

//先序創建二叉樹
Status CreateBiTree(BiTree *T)
{
  ElemType ch;
  ElemType temp;

  scanf("%d", &ch);
  temp = getchar();

  if (-1 == ch)
    *T = NULL;
  else
  {
    *T = (BiTree)malloc(sizeof(BiTNode));
    if (!(*T))
      exit(-1);

    (*T)->data = ch;
    printf("輸入%d的左子節點:", ch);
    CreateBiTree(&(*T)->lChild);
    printf("輸入%d的右子節點:", ch);
    CreateBiTree(&(*T)->rChlid);
  }

  return 1;
}

//先序遍歷二叉樹
void TraverseBiTree(BiTree T)
{
  if (NULL == T)
    return ;
  printf("%d ", T->data);
  TraverseBiTree(T->lChild);
  TraverseBiTree(T->rChlid);

}

//中序遍歷二叉樹
void InOrderBiTree(BiTree T)
{
  if (NULL == T)
    return ;
  InOrderBiTree(T->lChild);
  printf("%d ", T->data);
  InOrderBiTree(T->rChlid);

}

//後序遍歷二叉樹
void PostOrderBiTree(BiTree T)
{
  if (NULL == T)
    return ;
  PostOrderBiTree(T->lChild);
  PostOrderBiTree(T->rChlid);
  printf("%d ", T->data);

}


//二叉樹的深度

int TreeDeep(BiTree T)
{
  int deep = 0;
  if(T)
  {
    int leftdeep = TreeDeep(T->lChild);
    int rightdeep = TreeDeep(T->rChlid);
    deep = leftdeep>=rightdeep?leftdeep+1:rightdeep+1;
  }
  return deep;
}

//求二叉樹葉子結點個數

int Leafcount(BiTree T,int &num)
{  
  if(T)
  {
    if(T->lChild ==NULL &&T->rChlid==NULL)	
      num++;
    Leafcount(T->lChild,num);
    Leafcount(T->rChlid,num);

  }
  return num;
}
//主函數
int main(void)
{
  BiTree T;
  BiTree *p = (BiTree*)malloc(sizeof(BiTree));
  int deepth,num=0 ;
  printf("請輸入第一個結點的值,-1表示沒有葉結點:\n");
  CreateBiTree(&T);
  printf("先序遍歷二叉樹:\n");
  TraverseBiTree(T);
  printf("\n");
  printf("中序遍歷二叉樹:\n");
  InOrderBiTree(T);
  printf("\n");
  printf("後序遍歷二叉樹:\n");
  PostOrderBiTree(T);
  printf("\n");
  deepth=TreeDeep(T);
  printf("樹的深度爲:%d",deepth);
  printf("\n");
  Leafcount(T,num);
  printf("樹的葉子結點個數爲:%d",num);
  printf("\n");
  return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章