6-1 二叉树较大元素求和
分数 12
全屏浏览题目
切换布局
作者 周强
单位 青岛大学
实现一个函数,返回二叉树bt
中所有大于X
的元素之和。
函数接口定义:
int sumGreater(struct BinTree* bt, int X);
其中二叉树定义如下:
struct BinTree{ int data; struct BinTree* left; struct BinTree* right; };
题目保证二叉树中所有元素均为整数,且元素之和在整型int
的范围之内。
如果二叉树中所有元素都不大于X
,则函数返回0
。
裁判测试程序样例:
#include "stdio.h"
#include "stdlib.h"
struct BinTree{
int data;
struct BinTree* left;
struct BinTree* right;
};
struct BinTree* createNode(int item){ //创建结点
/* 函数实现细节省略*/
}
struct BinTree* findNode(struct BinTree* bt, int item){ //查找结点
/* 函数实现细节省略*/
}
int insert(struct BinTree*bt, int parent, int dir, int item){ //插入结点
/* 实现细节仅供参考 */
struct BinTree* tmp;
tmp = findNode(bt, parent);
if(!tmp) return 0;
if(dir == 0){
if(tmp->left) return 0;
tmp->left = createNode(item);
if(tmp->left == NULL) return 0;
} else{
if(tmp->right) return 0;
tmp->right = createNode(item);
if(tmp->right == NULL) return 0;
}
return 1;
}
struct BinTree* createBinTree(){ //创建二叉树
/* 实现细节仅供参考 */
int total, data;
scanf("%d", &total);
if(total == 0) return NULL;
scanf("%d", &data);
struct BinTree* bt;
bt = createNode(data);
if(!bt) return NULL;
int parent,dir;
for(int i=1; i<total; i++){
scanf("%d%d%d",&parent, &dir, &data);
insert(bt,parent, dir, data);
}
return bt;
}
int sumGreater(struct BinTree* bt, int X);
int main(){
struct BinTree* bt;
bt = createBinTree();
int X;
scanf("%d", &X);
printf("%d\n",sumGreater(bt, X));
return 0;
}
/* 你提交的代码将被嵌入在这儿 */
输入样例:
对于图片中的二叉树以及样例测试程序的输入方式:
3
20
20 0 10
20 1 25
18
输出样例:
对于样例测试程序的输出方式:
45
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
思想:利用先序遍历,将所以遍历一遍,再利用全局变量记录并加上大于X的数据
int sum=0;
int sumGreater(struct BinTree* bt, int X){
if(bt){
if(bt->data>=X) sum+=bt->data;
sumGreater( bt->left, X);
sumGreater( bt->right, X);
}
return sum;
}