2014阿里巴巴校招在线笔试题(数据研发工程师岗位)之二叉树

此题为2014阿里巴巴校招在线笔试题之附加题之一(数据研发工程师岗位)

题目:

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

实现思路:

1、定义结构体。

2、创建二叉树。

3、遍历二叉树,找到最大值和最小值。因为要找到相差最大的两个节点间的差值绝对值,因此,只要找到最大值,最小值,然后采用最大值减最小值即为结果。

4、输出结果(即最大值减最小值)。


#include<stdio.h>
int max=0;
int min=0;
//定义结构体
typedef struct Node{
	int data;
	struct Node * left;
	struct Node * right;
}BinaryTree;

//创建二叉权
BinaryTree * createBinaryTree(){
	int in=0;
	scanf("%d",&in);
	if(in!='\0'){
		BinaryTree * bt=(BinaryTree*)malloc(sizeof(struct Node));
		if(bt!=NULL){
			bt->data=in;
			bt->left=createBinaryTree();
			bt->right=createBinaryTree();
		}
		return bt;
	}
	else
		return NULL;
}
//遍历二叉树,找最大值和最小值
void visitor2(BinaryTree * bt){
	if(bt!=NULL){
		if(bt->data>max)
			max=bt->data;
		if(bt->data<min)
			min=bt->data;
		visitor2(bt->left);
		visitor2(bt->right);
	}
}
int main(){
	BinaryTree* bt;
	if(bt!=NULL)
		bt=createBinaryTree();
	max=min=bt->data;
	visitor2(bt);
	printf("%d\n",max-min);
	return 0;
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值