题目:写一个函数,输入一个二叉树,树中每个节点存放了一个整数值,函数返回这棵二叉树中相差最大的两个节点间的差值绝对值。请注意程序效率。
/* 节点结构体*/
struct BTNode
{
int ELEMENT;
BTNode *Lchild,*Rchild;
};
//返回最大值和最小值的函数
int max(int l ,int r)
{
return (l > r ? l : r);
}
int min(int l, int r)
{
return (l < r ? l : r);
}
//********************************方法一
int findMaxDiff(); // 返回这棵二叉树中相差最大的两个节点间的差值绝对值
int foo_max(BTNode * p); //找到树最大值
int foo_min(BTNode * p); //找到树最小值
int foo_max(BTNode * p)
{
if (p == NULL)
return -1*INT_MAX;
int l = foo_max(p->Lchild);
int r = foo_max(p->Rchild);
l = max(l, r);
return max(l, p->ELEMENT);
}
int foo_min(BTNode * p)
{
if (p == NULL)
return INT_MAX;
int l = foo_min(p->Lchild);
int r = foo_min(p->Rchild);
l = min(l, r);
return min(l, p->ELEMENT);
}
int findMaxDiff()
{
return foo_max(root) - foo_min(root);
}
//*******************方法二
struct max_min
{//同时包含最大值和最小值的结构体
int max;
int min;
}
max_min foo_max_min(BTNode * p); //同时找到最大值和最小值
max_min foo_max_min(BTNode * p)
{
if (p == NULL)
{
max_min mm = {-1*INT_MAX , INT_MAX};
return mm;
}
max_min l = foo_max_min(p->Lchild);
max_min r = foo_max_min(p->Rchild);
int t_max = max(l.max, r.max);
int t_min = min(l.min, r.min);
max_min t_max_min = { max(t_max, p->ELEMENT), min(t_min, p->ELEMENT) };
return t_max_min;
}
int findMaxDiff()
{
max_min mm= foo_max_min(root);
return mm.max - mm.min;
}
转自: http://blog.csdn.net/denglfs/article/details/38930453