目录
- 1.实现的接口
- 1.1通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树
- 1.2 二叉树销毁
- 1.3二叉树节点个数
- 1.4二叉树第k层节点个数
- 1.5 二叉树查找值为x的节点
- 1.6二叉树前序遍历
- 1.7二叉树中序遍历
- 1.8二叉树后序遍历
- 1.9层序遍历
- 1.10判断二叉树是否是完全二叉树
- 1.11 二叉树叶子节点个数
1.实现的接口
1.1通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树
// 通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树
BTNode* BinaryTreeCreate(BTDataType* a, int n, int* pi);
if (a[*pi] == '#' || (*pi) >= n)
{(*pi)++;return NULL;
}
BTNode* root = (BTNode*)malloc(sizeof(BTNode));
root->_data = a[*pi];
(*pi)++;
root->_left = BinaryTreeCreate(a, n, pi);
root->_right = BinaryTreeCreate(a, n, pi);
return root;
1.2 二叉树销毁
// 二叉树销毁
void BinaryTreeDestory(BTNode** root);
void BinaryTreeDestory(BTNode* root)
{if (root == NULL)return;BinaryTreeDestory(root->_left);BinaryTreeDestory(root->_right);free(root);
}
1.3二叉树节点个数
// 二叉树节点个数
int BinaryTreeSize(BTNode* root);
int BinaryTreeSize(BTNode* root)
{if (root == NULL)return 0;static size = 0;size++;BinaryTreeSize(root->_left);BinaryTreeSize(root->_right);return size;}
1.4二叉树第k层节点个数
// 二叉树第k层节点个数
int BinaryTreeLevelKSize(BTNode* root, int k);
int BinaryTreeLevelKSize(BTNode* root, int k)
{if (root == NULL)return 0;if (k == 1)return 1;return BinaryTreeLevelKSize(root->_left, k - 1) + BinaryTreeLevelKSize(root->_right, k - 1);}
1.5 二叉树查找值为x的节点
// 二叉树查找值为x的节点
BTNode* BinaryTreeFind(BTNode* root, BTDataType x);
BTNode* BinaryTreeFind(BTNode* root, BTDataType x)
{if (root == NULL)return NULL;if (root->_data == x)return root;BTNode* left = BinaryTreeFind(root->_left, x);if (left)return left;BTNode*right = BinaryTreeFind(root->_right, x);if (right)return right;
}
1.6二叉树前序遍历
// 二叉树前序遍历
void BinaryTreePrevOrder(BTNode* root);
void BinaryTreePrevOrder(BTNode* root)
{if (root == NULL)return;printf("%c ", root->_data);BinaryTreePrevOrder(root->_left);BinaryTreePrevOrder(root->_right);
}
1.7二叉树中序遍历
// 二叉树中序遍历
void BinaryTreeInOrder(BTNode* root);
void BinaryTreeInOrder(BTNode* root)
{BinaryTreeInOrder(root->_left);printf("%c ", root->_data);BinaryTreeInOrder(root->_right);}
1.8二叉树后序遍历
// 二叉树后序遍历
void BinaryTreePostOrder(BTNode* root);
void BinaryTreePostOrder(BTNode* root)
{BinaryTreePostOrder(root->_left);BinaryTreePostOrder(root->_right);printf("%c ", root->_data);
}
1.9层序遍历
// 层序遍历
void BinaryTreeLevelOrder(BTNode* root);
void BinaryTreeLevelOrder(BTNode* root)
{Queue q;QueueInit(&q);if (root)QueuePush(&q, root);while (!QueueEmpty(&q)){BTNode* node=QueueFrontdata(&q);printf("%c ", node->_data);QueuePop(&q);if (node->_left){QueuePush(&q, node->_left);}if (node->_right){QueuePush(&q, node->_right);}}}
1.10判断二叉树是否是完全二叉树
// 判断二叉树是否是完全二叉树
int BinaryTreeComplete(BTNode* root);
int BinaryTreeComplete(BTNode* root)
{Queue q;QueueInit(&q);if (root)QueuePush(&q, root);while (!QueueEmpty(&q)){BTNode* tmp= QueueFrontdata(&q);QueuePop(&q);if (tmp == NULL)break;QueuePush(&q, tmp->_left);QueuePush(&q, tmp->_right);}while (!QueueEmpty(&q)){if (QueueFrontdata(&q) != NULL){QueueDestory(&q);return false;}QueuePop(&q);}QueueDestory(&q);return true;
}
1.11 二叉树叶子节点个数
// 二叉树叶子节点个数
int BinaryTreeLeafSize(BTNode* root);
int BinaryTreeLeafSize(BTNode* root)
{if (root == NULL)return 0;if (root->_left == NULL && root->_right == NULL)return 1;return BinaryTreeLeafSize(root->_left)+ BinaryTreeLeafSize(root->_right);}
结尾:今天的分享到此结束,喜欢的朋友如果感觉有帮助可以点赞三连支持,咱们共同进步!