//算法5.6 统计二叉树中结点的个数 #include<iostream> using namespace std; //二叉树的二叉链表存储表示 typedef struct BiNode 1 char data; //结点数据域 struct BiNode *lchild,*rchild; //左右孩子指针 ] BiTNode,*BiTree; //用算法5.3建立二叉链表 void CreateBiTree(BiTree &T) //用算法5.3建立二叉链表 void CreateBiTree(BiTree &T) //按先序次序输入二叉树中结点的值(一个字符),创建二叉链表表示的二叉树T char ch; cin >> ch; if(ch=='#') T=NULL; //递归结束,建空树 else T=new BiTNode; T->data=ch; //生成根结占 CreateBiTree(T->lchild). /递归创建左子树 CreateBiTree(T->rchild); /递归创建右子树 //else ) //CreateBiTree //else ) //CreateBiTree int NodeCount(BiTree T) if(T==NULL) return 0; 如果是空树,则结点个数为0,递归结束 else return NodeCount(T->lchild)+ NodeCount(T->rchild) +1; //否则结点个数为左子树的结点个数+右子树的结点个数+1 void main() void main() BiTree tree; cout<<"请输入建立二叉链表的序列:\n"; CreateBiTree(tree); cout<<"结点个数为: "<<NodeCount(tree)<<endl; )
时间: 2024-01-13 21:02:49 浏览: 81
这段代码是用来统计二叉树中结点个数的,使用的是二叉链表存储结构。其中CreateBiTree函数用来建立二叉树,按照先序遍历的顺序输入二叉树中结点的值,如果输入的是'#'代表该节点为空。NodeCount函数用来递归计算二叉树中结点的个数,如果是空树,返回0;否则返回左子树的结点个数+右子树的结点个数+1。最后在主函数中调用CreateBiTree和NodeCount函数,并输出结果。
相关问题
#include<iostream> using namespace std; typedef struct BiTNode { int data; int cnt; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; int sum=0; //全局变量sum表示排序树当前结点的个数,也为了判断数据是否为输出的最后一个数 void SearchBST(BiTree &T,int x) {//基于非递归的二叉排序树的结点的查找和插入 } void InOrderTraverse(BiTree T) {//中序遍历输出二叉树T结点 } void Print_Count(BiTree T,int x) {//中序遍历输出二叉树T计数 },补充我的代码
以下是补充完整的代码,其中包括了基于非递归的二叉排序树的结点的查找和插入、中序遍历输出二叉树结点以及中序遍历输出二叉树计数的实现。你可以根据自己的需求进行调整。
```
#include<iostream>
using namespace std;
typedef struct BiTNode {
int data;
int cnt;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
int sum=0; //全局变量sum表示排序树当前结点的个数,也为了判断数据是否为输出的最后一个数
void SearchBST(BiTree &T,int x) {//基于非递归的二叉排序树的结点的查找和插入
if(T==NULL) {//如果根节点为空,则新建节点作为根节点
T=new BiTNode;
T->data=x;
T->cnt=1;
T->lchild=NULL;
T->rchild=NULL;
} else {//否则遍历树,找到合适的位置进行插入或计数
BiTree p=T;
while(p!=NULL) {
if(p->data==x) {
p->cnt++;
break;
} else if(p->data>x) {
if(p->lchild==NULL) {
BiTree q=new BiTNode;
q->data=x;
q->cnt=1;
q->lchild=NULL;
q->rchild=NULL;
p->lchild=q;
break;
} else {
p=p->lchild;
}
} else {
if(p->rchild==NULL) {
BiTree q=new BiTNode;
q->data=x;
q->cnt=1;
q->lchild=NULL;
q->rchild=NULL;
p->rchild=q;
break;
} else {
p=p->rchild;
}
}
}
}
}
void InOrderTraverse(BiTree T) {//中序遍历输出二叉树T结点
if(T==NULL) {
return;
}
InOrderTraverse(T->lchild);
cout<<T->data<<" ";
InOrderTraverse(T->rchild);
}
void Print_Count(BiTree T,int x) {//中序遍历输出二叉树T计数
if(T==NULL) {
return;
}
Print_Count(T->lchild,x);
if(T->data==x) {
cout<<T->cnt<<endl;
sum++;
}
if(sum==T->cnt) {//判断数据是否为输出的最后一个数
return;
}
Print_Count(T->rchild,x);
}
int main() {
BiTree T=NULL;//初始化二叉排序树
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++) {
int x;
cin>>x;
SearchBST(T,x);//向二叉排序树中插入数据
}
InOrderTraverse(T);//中序遍历输出二叉树结点
cout<<endl;
for(int i=0;i<m;i++) {
int x;
cin>>x;
sum=0;//初始化sum
Print_Count(T,x);//中序遍历输出数据x的计数
}
return 0;
}
```
#include<iostream> using namespace std; //二叉树的二叉链表存储表示 typedef struct BiNode 1 char data; //结点数据域 struct BiNode *lchild,*rchild; //左右孩子指针 ] BiTNode,*BiTree; //用算法5.3建立二叉链表 void CreateBiTree(BiTree &T) //用算法5.3建立二叉链表 void CreateBiTree(BiTree &T) //按先序次序输入二叉树中结点的值(一个字符),创建二叉链表表示的二叉树T char ch; cin >> ch; if(ch=='#') T=NULL; //递归结束,建空树 else T=new BiTNode; T->data=ch; //生成根结占 CreateBiTree(T->lchild). /递归创建左子树 CreateBiTree(T->rchild); /递归创建右子树 //else ) //CreateBiTree //else ) //CreateBiTree int NodeCount(BiTree T) if(T==NULL) return 0; 如果是空树,则结点个数为0,递归结束 else return NodeCount(T->lchild)+ NodeCount(T->rchild) +1; //否则结点个数为左子树的结点个数+右子树的结点个数+1 void main() void main() BiTree tree; cout<<"请输入建立二叉链表的序列:\n"; CreateBiTree(tree); cout<<"结点个数为: "<<NodeCount(tree)<<endl; )
这是一个建立二叉树并计算二叉树结点个数的程序,但是其中存在一些语法错误和拼写错误,建议进行修改:
```
#include<iostream>
using namespace std;
//二叉树的二叉链表存储表示
typedef struct BiNode
{
char data; //结点数据域
struct BiNode *lchild,*rchild; //左右孩子指针
} BiTNode,*BiTree;
//用算法5.3建立二叉链表
void CreateBiTree(BiTree &T)
{
char ch;
cin >> ch;
if(ch=='#')
T=NULL; //递归结束,建空树
else
{
T=new BiTNode;
T->data=ch; //生成根结点
CreateBiTree(T->lchild); //递归创建左子树
CreateBiTree(T->rchild); //递归创建右子树
}
}
int NodeCount(BiTree T)
{
if(T==NULL)
return 0; //如果是空树,则结点个数为0,递归结束
else
return NodeCount(T->lchild)+ NodeCount(T->rchild) +1; //否则结点个数为左子树的结点个数+右子树的结点个数+1
}
int main()
{
BiTree tree;
cout<<"请输入建立二叉链表的序列:\n";
CreateBiTree(tree);
cout<<"结点个数为: "<<NodeCount(tree)<<endl;
return 0;
}
```
阅读全文