题目描述:
给定一个二叉树,计算整个树的坡度。
一个树的节点的坡度定义即为,该节点左子树的结点之和和右子树结点之和的差的绝对值。空结点的的坡度是0。
整个树的坡度就是其所有节点的坡度之和。
思路:
求结点和左右子树的累和值,后续遍历框架,顺便求出坡度
代码:
int getIncline(BTNode *t){
if(!t)
return 0;
int sum=0;
calcTilt(t,&sum);
return sum;
}
int calcTilt(BTNode *t,int *sum){
if(t==NULL)
return 0;
int left=calcTilt(t->lchild,sum);
int right=calcTilt(t->rchild,sum);
*sum+=ABS(left,right);//已定义的宏命令,计算两个数的绝对值
return t->data+left+right;//这一步只是返回给前面的结点,来计算对应的坡度
}
测试:
#include<stdio.h>
#include <stdlib.h>
#include<math.h> //数学函数,求平方根、三角函数、对数函数、指数函数...
#define MAXSIZE 100
//宏定义
#define ABS(a,b) ((a) > (b) ? ((a) - (b)) : ((b) - (a)))
//用于使用c++的输出语句
#include<iostream>
using namespace std;
typedef struct BTNode
{
int data;
struct