以二叉链表作为二叉树的存储结构,编写以下算法: (1)统计二叉树的叶结点个数。 (2)判断两棵树是否相等。 (3)交换二叉树每个结点的左孩子和右孩子。C语言
时间: 2023-11-15 22:04:35 浏览: 183
设二叉树采用链式存储结构,试设计一个算法计算一颗给定二叉树叶子节点的数目
5星 · 资源好评率100%
好的,我会根据您的要求回答问题并提供相应的算法实现。以下是针对您的问题的算法实现:
(1)统计二叉树的叶节点个数:
```c
int count_leaf_nodes(struct TreeNode* root) {
if (root == NULL) {
return 0;
}
if (root->left == NULL && root->right == NULL) {
return 1;
}
return count_leaf_nodes(root->left) + count_leaf_nodes(root->right);
}
```
(2)判断两棵树是否相等:
```c
bool is_same_tree(struct TreeNode* p, struct TreeNode* q) {
if (p == NULL && q == NULL) {
return true;
}
if (p == NULL || q == NULL) {
return false;
}
if (p->val != q->val) {
return false;
}
return is_same_tree(p->left, q->left) && is_same_tree(p->right, q->right);
}
```
(3)交换二叉树每个结点的左孩子和右孩子:
```c
struct TreeNode* invert_tree(struct TreeNode* root) {
if (root == NULL) {
return NULL;
}
struct TreeNode* temp = root->left;
root->left = root->right;
root->right = temp;
invert_tree(root->left);
invert_tree(root->right);
return root;
}
```
以上就是针对您的问题的算法实现,希望能对您有所帮助。如果您有其他问题,可以随时提出,我会尽力回答。
阅读全文