二叉樹的構建,遍歷等基本操作
阿新 • • 發佈:2019-02-07
#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;
}
#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;
}