題目:寫一個函數,輸入一個二叉樹,樹中每個節點存放了一個整數值,函數返回這棵二叉樹中相差最大的兩個節點間的差值絕對值。請注意程序效率。
/* 節點結構體*/
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