你的代码存在一些问题,缺少了数据类型int data;。我已经修正并补全了代码如下:
#include <iostream>
using namespace std;
typedef struct BiTNode { // 结点结构
int data;
struct BiTNode* lchild, * rchild;
} BiTNode, *BiTree;
void PreorderTraverse(BiTree T) {
if (T) {
printf("%d ", T->data); // 访问根结点
PreorderTraverse(T->lchild); // 遍历左子树
PreorderTraverse(T->rchild); // 遍历右子树
}
}
void InorderTraverse(BiTree T) {
if (T) {
InorderTraverse(T->lchild); // 遍历左子树
printf("%d ", T->data); // 访问根结点
InorderTraverse(T->rchild); // 遍历右子树
}
}
void PostorderTraverse(BiTree T) {
if (T) {
PostorderTraverse(T->lchild); // 遍历左子树
PostorderTraverse(T->rchild); // 遍历右子树
printf("%d ", T->data); // 访问根结点
}
}
int BiTNodeCount(BiTree T) {
if (T == NULL)
return 0;
else
return (BiTNodeCount(T->lchild) + BiTNodeCount(T->rchild) + 1);
}
int BiTLeafCount(BiTree T) {
if (T == NULL)
return 0;
if (T->lchild == NULL && T->rchild == NULL)
return 1;
else
return (BiTLeafCount(T->lchild) + BiTLeafCount(T->rchild));
}
int main() {
// 构造二叉树
BiTree root = new BiTNode{1, nullptr, nullptr};
root->lchild = new BiTNode{2, nullptr, nullptr};
root->rchild = new BiTNode{3, nullptr, nullptr};
root->lchild->lchild = new BiTNode{4, nullptr, nullptr};
root->lchild->rchild = new BiTNode{5, nullptr, nullptr};
// 遍历输出
cout << "Preorder Traverse: ";
PreorderTraverse(root);
cout << endl << "Inorder Traverse: ";
InorderTraverse(root);
cout << endl << "Postorder Traverse: ";
PostorderTraverse(root);
// 结点数和叶子结点数
cout << endl << "Number of Nodes: " << BiTNodeCount(root);
cout << endl << "Number of Leafs: " << BiTLeafCount(root);
// 释放内存
delete root->lchild->lchild;
delete root->lchild->rchild;
delete root->rchild;
delete root;
return 0;
}
这个程序创建了一个二叉树,并实现了前序、中序、后序遍历以及计算结点数和叶子结点数的功能。你可以根据需要进行修改和扩展。
内容由零声教学AI助手提供,问题来源于学员提问




