用递归的方法求二叉树的所有结点数据域的和
源代码如下:
#include <iostream>
#include <stdlib.h>
using namespace std;
//用二叉链表定义二叉树的结点类型
typedef struct BNode {
int data; //数据域
struct BNode *lchild, *rchild; //左子树和右子树
}BTree;
//创建二叉树
BTree* createBitTree(BTree* BT) {
int num = 0;
cin >> num;
if (num != -1) { //输入-1代表结束
BT = (BTree*)malloc(sizeof(BTree));
BT->data = num;
printf("输入%d的左结点值:", BT->data);
BT->lchild = createBitTree(BT->lchild);
printf("输入%d的右结点值:", BT->data);
BT->rchild = createBitTree(BT->rchild);
return BT;
}else { //千万注意不要忘记了
return NULL;
}
}
//用递归的方法求二叉树的所有结点数据域的和
int Sum(BTree *BT) {
if (BT==NULL) {
return 0;
}
else{
return (Sum(BT->lchild) + Sum(BT->rchild) + BT->data);
}
}
int main() {
BTree *BT=NULL; //创建树根
BT= createBitTree(BT);
cout << "输出的结点的和为:" << Sum(BT) << endl;;
system("pause");
}