小米2017校招笔试题

Posted Juntaran

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小米2017校招笔试题相关的知识,希望对你有一定的参考价值。

只过了20%...我日

树的高度
时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB
题目描述:
现在有一棵合法的二叉树,树的节点都是用数字表示,
现在给定这棵树上所有的父子关系,求这棵树的高度

输入
输入的第一行表示节点的个数n(1<=n<=1000,节点的编号为0到n-1)组成,
下面是n-1行,每行有两个整数,第一个数表示父节点的编号,第二个数表示子节点的编号

输出
输出树的高度,为一个整数

样例输入
5
0 1
0 2
1 3
1 4
样例输出
3

 

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <malloc.h>
 4 #include <bits/stdc++.h>
 5 
 6 using namespace std;
 7 
 8 void SortTwoArray(int* parent, int* node, int length)
 9 {
10     int temp1;
11     int temp2;
12     for (int i = 0; i < length; ++i)
13     {
14         for (int j = 0; j < length - i; ++j)
15         {
16             if (node[j] > node[j+1])
17             {
18                 temp1 = node[j+1];
19                 node[j+1] = node[j];
20                 node[j] = temp1;
21                 
22                 temp2 = parent[j+1];
23                 parent[j+1] = parent[j];
24                 parent[j] = temp2;
25             }
26         }
27     }
28 }
29 
30 // 二分查找
31 int Binary_Search(int* nums, int length, int key)
32 {
33     int left, right, middle;
34     left  = 0;
35     right = length - 1;
36 
37     while (left <= right)
38     {
39         middle = (left + right) / 2;
40         if (key < nums[middle])
41         {
42             right = middle - 1;
43         }
44         else if (key > nums[middle])
45         {
46             left = middle + 1;
47         }
48         else
49         {
50             return middle;
51         }
52     }
53     return -1;
54 }
55 
56 
57 int main()
58 {
59     int n;
60     while (scanf("%d", &n) != EOF)
61     {
62         if (n == 1)
63         {
64             int a, b;
65             scanf("%d %d", &a, &b);
66             printf("1\n");
67             continue;
68         }
69         int length = n - 1;
70         int* parent = (int*)malloc(sizeof(int)*length);
71         int* node = (int*)malloc(sizeof(int)*length);
72         for (int i = 0; i < length; ++i)
73         {
74             scanf("%d", &parent[i]);
75             scanf("%d", &node[i]);
76         }
77         SortTwoArray(parent, node, length);
78         int height = 1;
79         int Num = node[length - 1];
80         while (Num != 0)
81         {
82             int pos = Binary_Search(node, length, Num);
83             Num = parent[pos];
84             height ++;
85         }
86         printf("%d\n", height);
87         free(parent);
88         free(node);
89     }
90     return 0;
91 }

 

以上是关于小米2017校招笔试题的主要内容,如果未能解决你的问题,请参考以下文章

微软2017校招笔试题3 registration day

网易2017年校招笔试题 最大的奇约数

LGYX2017校招笔试题

奇虎360 2017校招笔试题

算法题 144:线性结构完全二叉树等5道题(努比亚2017校招笔试题)

百度2015校招笔试题(头巾问题)