-->
当前位置:首页 > 题库 > 正文内容

函数题:表达式中运算数计数(二叉树的遍历)

Luz3年前 (2022-06-04)题库733
请编写程序,实现统计二叉树表示的表达式中操作数的个数。例如,下图表示:A-F*G+C,其中运算数共有4个。(提示:运算数均在叶子结点上,叶子结点数即为运算数个数)
![image.png](~/bfedabac-1262-4069-b5a5-75df32e19a2d.png)
### 函数接口定义:
c++
BiTree Create();
/*按先序输入创建一棵二叉树,返回二叉树根节点指针。*/
int OperandCount(BiTree T);
/*T是二叉树树根指针,函数OperandCount返回二叉树中操作数的个数,若树为空,则返回0。题目保证所给二叉树一定是正确的表达式。*/


### 裁判测试程序样例:
c++
在这里给出函数被调用进行测试的例子。例如:
#include <stdio.h>
#include <stdlib.h>

typedef char ElemType;
typedef struct BiTNode
{
ElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

BiTree Create();
int OperandCount ( BiTree T);

int main()
{
BiTree T;
T = Create();
printf("%d\n", OperandCount(T));
return 0;
}
/* 请根据下面提示,补充横线上的代码,并把两个函数的完整部分复制到答题框内 */
BiTree Create(){
char ch;
BiTree T;
scanf("%c",&ch);
if(ch=='#')
____________________________;//若输入字符为#,则该树为空
else{
T=(BiTree)malloc(sizeof(BiTNode)); //创建一个新结点T
____________________; //给新结点的数据域赋值
T->lchild=Create();
__________________________;//创建右子树
}
return T;
}
int OperandCount(BiTree T){
if(T==NULL)
___________________; //若树为空则个数为0
if(_______________________)//若根节点为叶子结点
return 1;
else
return _______________________________; //否则返回左右子树上叶子结点之和
}

/* 请在这里填写答案 */



![image.png](~/b42c2616-68d3-4508-8db1-7c218aad4262.png)

### 输入样例:
对于上图所示的二叉树,输入数据为扩展的先序序列:
+-A##*F##G##C##

in
+-A##*F##G##C##


### 输出样例:
out
4








答案:若无答案欢迎评论

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。