阿里巴巴2015年秋季在线笔试附加题---树求最大差值

7 篇文章 2 订阅
6 篇文章 0 订阅

题目:写一个函数,输入一个二叉树,树中每个节点存放了一个整数值,函数返回这棵二叉树中相差最大的两个节点间的差值绝对值。请注意程序效率。


看起来好像挺简单的...给了一个小时做三道题,这是第一道,所以考虑了挺久..可惜没有什么好的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), 空间复杂度还就是一棵树...,用的最大值和最小值都是指针,只定义了一次.

效率应该是最好的了吧


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值