#include <stdio.h>
#include <stdlib.h>
struct treeNode {
char data;
struct treeNode* LChild;
struct treeNode* RChild;
};
struct treeNode* createNode(char data)
{
struct treeNode* newNode = (struct treeNode *)malloc(sizeof(struct treeNode));
newNode->data = data;
newNode->LChild = NULL;
newNode->RChild = NULL;
return newNode;
}
void linkNode(struct treeNode* currentNode, struct treeNode* LChildNode, struct treeNode* RChildNode)
{
currentNode->LChild = LChildNode;
currentNode->RChild = RChildNode;
}
void printNode(struct treeNode* currentNode)
{
printf("%c ", currentNode->data);
}
int LeavesNumber(struct treeNode* root)
{
if(root == NULL)
return 0;
else if((root->LChild == NULL) && (root->RChild == NULL))
return 1;
else
return (LeavesNumber(root->LChild) + LeavesNumber(root->RChild));
}
int NodeNumber(struct treeNode* root)
{
if(root)
{
if((root->LChild == NULL) && (root->RChild == NULL))
return 1;
else
return (NodeNumber(root->LChild) + NodeNumber(root->RChild) + 1);
}
return 0;
}
int TreeHigh(struct treeNode* root)
{
int h, lh, rh;
if(root == NULL)
h = 0;
else
{
lh = TreeHigh(root->LChild);
rh = TreeHigh(root->RChild);
h = (lh > rh ? lh : rh) + 1;
}
return h;
}
struct treeNode* SearchNode(struct treeNode* root, char posdata)
{
if(!root)
return NULL;
if(root->data == posdata)
return root;
else
{
struct treeNode* t;
t = SearchNode(root->LChild, posdata);
if(!t)
{
return SearchNode(root->RChild, posdata);
}
return t;
}
return NULL;
}
int main()
{
struct treeNode* A = createNode('A');
struct treeNode* B = createNode('B');
struct treeNode* C = createNode('C');
struct treeNode* D = createNode('D');
struct treeNode* E = createNode('E');
struct treeNode* F = createNode('F');
struct treeNode* G = createNode('G');
struct treeNode* H = createNode('H');
linkNode(A, B, C);
linkNode(B, D, E);
linkNode(C, F, G);
linkNode(F, NULL, H);
int leavesnumber = LeavesNumber(A);
printf("%d\n", leavesnumber);
int nodenumber = NodeNumber(A);
printf("%d\n", nodenumber);
int treehigh = TreeHigh(A);
printf("%d\n", treehigh);
struct treeNode* pos = SearchNode(A, 'H');
printf("%c\n", pos->data);
return 0;
}
二叉树求深度、叶子结点个数、结点总数C语言
最新推荐文章于 2024-04-26 18:19:42 发布