C语言使用cout,分别为:创建一颗二叉树T,计算二叉树的深度,求二叉树的节点总数,求二叉树的叶子节点个数,求二叉树度为二的节点个数,求二叉树度为一的节点个数,复制一颗二叉树,二叉树的层序遍历,输入0退出。完整代码
时间: 2024-11-17 12:13:55 浏览: 0
C++使用递归和非递归算法实现的二叉树叶子节点个数计算方法
5星 · 资源好评率100%
在C语言中,`iostream`库通常用于标准输入输出操作,但处理二叉树的操作涉及到数据结构的定义、操作函数以及递归等算法。下面是一个简单的示例,展示了如何用C++实现部分二叉树相关的功能,如创建树、计算深度、节点计数等,但完整的二叉树代码会包含更多的细节,比如树节点结构定义和遍历函数。
```cpp
#include <iostream>
using namespace std;
// 定义一个二叉树节点结构
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// 计算二叉树深度
int maxDepth(TreeNode* root) {
if (root == NULL) return 0;
return 1 + max(maxDepth(root->left), maxDepth(root->right));
}
// 获取节点总数
int countNodes(TreeNode* root) {
if (root == NULL) return 0;
return 1 + countNodes(root->left) + countNodes(root->right);
}
// 判断是否为叶子节点
bool isLeaf(TreeNode* node) {
return node->left == NULL && node->right == NULL;
}
// 统计度为2的节点(即有两个孩子的节点)
int degreeTwoNodes(TreeNode* root) {
if (root == NULL) return 0;
return isLeaf(root) ? 0 : degreeTwoNodes(root->left) + degreeTwoNodes(root->right);
}
// 统计度为1的节点(即只有一个孩子的节点)
int degreeOneNodes(TreeNode* root) {
if (root == NULL) return 0;
return 1 - (isLeaf(root) || (root->left && root->right)) + degreeOneNodes(root->left) + degreeOneNodes(root->right);
}
// 深拷贝二叉树
TreeNode* copyTree(TreeNode* root) {
if (root == NULL) return NULL;
return new TreeNode(root->val, copyTree(root->left), copyTree(root->right));
}
// 层序遍历
void levelOrderTraversal(TreeNode* root) {
if (root == NULL) return;
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
TreeNode* cur = q.front();
cout << cur->val << " ";
q.pop();
if (cur->left) q.push(cur->left);
if (cur->right) q.push(cur->right);
}
cout << endl;
}
// 输入0退出
int main() {
// 这里需要根据实际情况编写创建二叉树的代码
// 例如,可以使用用户输入或者数组初始化等方式
// 调用上述函数并处理输入/输出
return 0;
}
```
阅读全文