转载请注明出处:http://blog.csdn.net/ns_code/article/details/24744177


    题目:

Given a sorted (increasing order) array, write an algorithm to create a binary tree with minimal height.

    翻译:

给定一个有序数组(递增),敲代码构建一棵具有最小高度的二叉树。

    思路:

要使二叉树的高度最小,则要尽量使其左右子树的节点数目相当,自然就考虑到将其构造成为二叉排序树,且将有序数组的中间大的数作为根节点,这样得到的二叉树的高度便是最小的。

    实现代码:

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. typedef struct BTNode
  4. {
  5. int data;
  6. struct BTNode *pLchild;
  7. struct BTNode *pRchild;
  8. }BTNode, *BTree;
  9.  
  10. /*
  11. 依据给定的递增数组递归创建高度最小的二叉树,
  12. 由于要改动指向根节点的指针的指向,因此要传入pTree的指针。即BTNode的二级指针
  13. */
  14. void createBTree(BTree *ppTree,int *A,int start,int end)
  15. {
  16. if(start <= end)
  17. {
  18. int mid = (start + end)/2;
  19. *ppTree = (BTree)malloc(sizeof(BTNode));
  20. if(*ppTree == NULL)
  21. {
  22. printf("malloc faild");
  23. exit(EXIT_FAILURE);
  24. }
  25. (*ppTree)->data = A[mid];
  26. (*ppTree)->pLchild = NULL;
  27. (*ppTree)->pRchild = NULL;
  28. createBTree(&(*ppTree)->pLchild,A,start,mid-1);
  29. createBTree(&(*ppTree)->pRchild,A,mid+1,end);
  30. }
  31. }
  32.  
  33. /*
  34. 返回两个整数的最大值
  35. */
  36. int max(int a,int b)
  37. {
  38. return a>b?
  39.  
  40. a:b;
  41. }
  42.  
  43. /*
  44. 求二叉树的深度
  45. */
  46. int height(BTree pTree)
  47. {
  48. if(pTree == NULL)
  49. return 0;
  50. else
  51. return max(height(pTree->pLchild),height(pTree->pRchild)) + 1;
  52. }
  53.  
  54. /*
  55. 中序遍历的递归实现
  56. */
  57. void in_traverse(BTree pTree)
  58. {
  59. if(pTree)
  60. {
  61. if(pTree->pLchild)
  62. in_traverse(pTree->pLchild);
  63. printf("%d ",pTree->data);
  64. if(pTree->pRchild)
  65. in_traverse(pTree->pRchild);
  66. }
  67. }
  68.  
  69. int main()
  70. {
  71. int A[] = {0,1,2,3,4,5,6,7};
  72. int len = 8;
  73. BTree pTree;
  74. createBTree(&pTree,A,0,len-1);
  75. printf("the height of this tree is %d\n",height(pTree));
  76. printf("中序遍历后的结果为:\n");
  77. in_traverse(pTree);
  78. printf("\n");
  79. return 0;
  80. }

    測试结果:


    注:代码开源到Github:https://github.com/mmc-maodun/CareerCup


【CareerCup】Trees and Graphs—Q4.3的更多相关文章

  1. 【CF375D】Trees and Queries——树上启发式合并

    (题面不是来自Luogu) 题目描述 有一个大小为n且以1为根的树,树上每个点都有对应的颜色ci.现给出m次询问v, k,问以v为根的子树中有多少种颜色至少出现了k次. 输入格式 第一行两个数n,m表 ...

  2. 【HDU4010】【LCT】Query on The Trees

    Problem Description We have met so many problems on the tree, so today we will have a query problem ...

  3. 【计算几何初步-凸包-Jarvis步进法。】【HDU1392】Surround the Trees

    [科普]什么是BestCoder?如何参加? Surround the Trees Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65 ...

  4. 【HDU1693】Eat the Trees(插头dp)

    [HDU1693]Eat the Trees(插头dp) 题面 HDU Vjudge 大概就是网格图上有些点不能走,现在要找到若干条不相交的哈密顿回路使得所有格子都恰好被走过一遍. 题解 这题的弱化版 ...

  5. 【CF724F】Uniformly Branched Trees 动态规划

    [CF724F]Uniformly Branched Trees 题意:询问n个点的每个非叶子点度数恰好等于d的不同构的无根树的数目. $n\le 1000,d\le 10$. 题解:先考虑有根树的版 ...

  6. 【CF917D】Stranger Trees 树形DP+Prufer序列

    [CF917D]Stranger Trees 题意:给你一棵n个点的树,对于k=1...n,问你有多少有标号的n个点的树,与给出的树有恰好k条边相同? $n\le 100$ 题解:我们先考虑容斥,求出 ...

  7. 【LeetCode】95. Unique Binary Search Trees II 解题报告(Python)

    [LeetCode]95. Unique Binary Search Trees II 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzh ...

  8. 【leetcode】 Unique Binary Search Trees (middle)☆

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  9. 【动态规划】Codeforces 711C Coloring Trees

    题目链接: http://codeforces.com/problemset/problem/711/C 题目大意: 给N棵树,M种颜色,已经有颜色的不能涂色,没颜色为0,可以涂色,每棵树I涂成颜色J ...

随机推荐

  1. 我的spark python 决策树实例

    from numpy import array from pyspark.mllib.regression import LabeledPoint from pyspark.mllib.tree im ...

  2. CodeForces 651A(水题)

    Friends are going to play console. They have two joysticks and only one charger for them. Initially ...

  3. git如何解决冲突(master分支的上的冲突--太岁头上动土)

    欢迎加入前端交流群交流知识&&获取视频资料:749539640 git是什么就不废话了,详情点击 出现以下情况怎么解决? 有个index.ts文件 export const ENV = ...

  4. NAS与SAN有什么区别?

    NAS和SAN字面上相似,并且都是新型数据存储模式,但这二者是完全不同的,针对不同方向的技术,为了能够更好的区分它们,天伟数据恢复整理了以下内容供读者参考(天伟数据恢复建议重要数据多备份,备份很重要以 ...

  5. Java中利用随机数的猜拳游戏

    Java中利用随机数的猜拳游戏,实现非常简单,重难点在于随机数的产生. 首先GameJude类是用于判断输赢的一个类: package testGame; public class GameJudge ...

  6. 前端之HEML

    HTML介绍 Web服务本质   import socket sk = socket.socket() sk.bind(("127.0.0.1", 8080)) sk.listen ...

  7. 3rd 逻辑运算符的基本用法

    03.01_Java语言基础(逻辑运算符的基本用法)(掌握) A:逻辑运算符有哪些 &,|,^,! &&,|| B:案例演示 逻辑运算符的基本用法 注意事项: a:逻辑运算符一 ...

  8. py2exe打包OpenCV,找不到libiomp5md.dll

    问题:py2exe打包OpenCV,找不到libiomp5md.dll 解决方法:把 libiomp5md.dll 从numpy/core/ 里面复制到 python27/DLLS/文件夹!!!

  9. 4.4.2 OpenGL几何变换编程实例

    程序运行结果如下图: #include <GL/glut.h> #include <stdlib.h> #include <math.h> /* 初始化显示窗口大小 ...

  10. springboot-helloworld实现

    springboot快速入门 首先,建立一个空的项目 第二步: 建立一个springboot项目 第三步:添加依赖: <?xml version="1.0" encoding ...