二叉树算法的基本操作
typedef int BTDataType;
typedef struct BinaryTreeNode
{
BTDataType data;
struct BinaryTreeNode* left;
struct BinaryTreeNode* right;
}BT;
递归实现二叉树的前序、中序、后序遍历
//前序遍历
void PrevOrder(BT* root)
{
if(root==NULL)
{
printf("NULL ");
return;
}
printf("%d ",root->data);
PrevOrder(root->left);
PrevOrder(root->right);
}
//中序遍历
void InOrder(BT* root)
{
if(root==NULL)
{
printf("NULL ");
return;
}
InOrder(root->left);
printf("%d ",root->data);
InOrder(root->right);
}
//后序遍历
void PostOrder(BT* root)
{
if(root==NULL)
{
printf("NULL ");
return;
}
PostOrder(root->left);
PostOrder(root->right);
printf("%d ",root->data);
}
遍历法计算节点个数
int size=0;
void TreeSize(BT* root)
{
if(root==NULL){
return;
}
size++;
TreeSize(root->left);
TreeSize(root->right);
}
分治法计算节点数
int TreeSize2(BT* root)
{
if(root==NULL)
{
return 0;
}
return 1+TreeSize2(root->left)+TreeSize2(root->right);
}
计算叶子节点数
int BTreeLeafSize(BT* root)
{
if(root==NULL)
{
return 0;
}
if(root->left==NULL&&root->right==NULL)
{
return 1;
}
return BTreeLeafSize(root->left)+BTreeLeafSize(root->right);
}
计算第K层的节点数(root为第一层)
int BTreeKLeveLSize(BT* root,int K)
{
if(root==NULL)
{
return 0;
}
if(K==1)
{
return 1;
}
return BTreeKLeveLSize(root->left,K-1)+BTreeKLeveLSize(root->right,K-1);
}
找到为x的节点
BT* TreeFind(BT* root,int x)
{
if(root==NULL)
return NULL;
if(root->data==x)
return root;
BT* ret=TreeFind(root->left,x);
if(ret!=NULL)
{
return root;
}
ret=TreeFind(root->right,x);
if(ret!=NULL)
{
return root;
}
return NULL;
}
Stay hungry,Stay Foolish。
求知若饥,虚心若愚