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

来源:互联网 发布:淘宝上hm折扣代购真假 编辑:程序博客网 时间:2024/05/16 00:34

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


0 0
原创粉丝点击