备考期间写的二叉树类数据结构相关基本算法的C语言实现,为以后使用方便,现记录如下:
全局定义和依赖:
#include <stdio.h>
#include <stdlib.h>
#define elemType int
#define ERROR 0
#define OK 1
#define END NULL
二叉树结点:
typedef struct BTree //二叉树结点
{
elemType data;
struct BTree *Lchild,*Rchild;
} BiNode,*BiTree;
初始化二叉树:
BiTree initBiTree(elemType root) //初始化二叉树
{
BiNode *bt;
bt = (BiNode*)malloc(sizeof(BiNode));
if(bt==NULL){printf("Init BiTree Failed!\n");}
else{
bt->data = root;
bt->Lchild = bt->Rchild = NULL;
printf("Init BiTree Succeed!\n");
return bt;
}
}
递归式生成二叉树(前序):
//递归式
/*****************
递归的要点->1:确定基准情形(即有可能出现的所有情形)2:进行递归
******************/
//扩展二叉树先序遍历生成二叉树 以0为结束标志 输入时应按先序序列输入,且原本的叶子节点需要用 0 补全
BiTree preCreateBiTree(BiTree &root)
{
elemType e;
scanf("%d",&e);
if(e==0)
{
root = NULL;
}
else
{
root = (BiTree)malloc(sizeof(BiNode));
root->data = e;
preCreateBiTree(root->Lchild);
preCreateBiTree(root->Rchild);
}
return root;
}
三种顺序递归式遍历二叉树:
//先序遍历二叉树
void preTraversalBiTree(BiTree root)
{
if(root==NULL)
{
return;
}
else{
printf("%d ",root->data);
preTraversalBiTree(root->Lchild);
preTraversalBiTree(root->Rchild);
}
}
//中序遍历二叉树
void midTraversalBiTree(BiTree root)
{
if(root)
{
midTraversalBiTree(root->Lchild);
printf("%d ",root->data);
midTraversalBiTree(root->Rchild);
}
}
//后序遍历二叉树
void lastTraversalBiTree(BiTree root)
{
if(root)
{
lastTraversalBiTree(root->Lchild);
lastTraversalBiTree(root->Rchild);
printf("%d ",root->data);
}
}
统计二叉树中结点的数目(递归):
//统计二叉树节点的总数目
int calculateNodeOfBiTree(BiTree root)
{
if(root==NULL)
{
return 0;
}
else{
return 1+calculateNodeOfBiTree(root->Lchild) + calculateNodeOfBiTree(root->Rchild);
}
}
递归计算二叉树的深度(约定根节点为第一层):
//统计二叉树的深度 设根节点为第1层
int depthOfBiTree(BiTree root)
{
if(root)
{
return depthOfBiTree(root->Lchild) > depthOfBiTree(root->Rchild)?depthOfBiTree(root->Lchild)+1:depthOfBiTree(root->Rchild)+1;
}
else{
return 0;
}
}
统计二叉树中叶子节点数目(递归):
//统计二叉树叶子节点数 递归
int calculateLeafNodesOfBiTree(BiTree root)
{
if(root == NULL)
{
return 0;
}
else if((root->Lchild==NULL)&&(root->Rchild==NULL))
{
return 1;
}
else{
return (calculateLeafNodesOfBiTree(root->Lchild) + calculateLeafNodesOfBiTree(root->Rchild));
}
}
---------------------------------- BiTree STACK ---------------------------------