此题为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;
}