题目:写一个函数,输入一个二叉树,树中每个节点存放了一个整数值,函数返回这棵二叉树中相差最大的两个节点间的差值绝对值。请注意程序效率。
看起来好像挺简单的...给了一个小时做三道题,这是第一道,所以考虑了挺久..可惜没有什么好的idea
题目的意思不知道是指距离相差最大的节点数值之差,
还是说要求所有数值相差最大的那个. 姑且我就按照第二个意思来做了
不要说我太简单,会⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄) 害羞的!
struct TNode{ //树节点的结构
int data;
TNode *lChild,*rChild;
};
typedef struct TNode *Tree; //申明树节点的指针结构,不然下面的=NULL会出错
void find_min_max(Tree node,int *max,int *min) //返回最大最小值,自带递归
{
if(*max <node->data)*max=node->data;
else if(*min >node->data)*min=node->data;
if(node->lChild!=NULL)find_min_max(node->lChild,max,min);
if(node->rChild!=NULL)find_min_max(node->rChild,max,min);
return;
}
int Treeabs(Tree node) //这个就是求差值的函数了
{
if(node==NULL)return 0;
int min=node->data;
int max=min;
find_min_max(node,&max,&min);
return max-min;
}
时间复杂度是 O(n), 空间复杂度还就是一棵树...,用的最大值和最小值都是指针,只定义了一次.
效率应该是最好的了吧