将一个数组转换成深度最低的二叉树
来源:互联网 发布:aix测试端口 编辑:程序博客网 时间:2024/04/28 09:44
问题定义:
Givena sorted(increasing order) array, write an algorithm to create abinary tree with minimal height.
思路:
这题还是比较简单的,从已排序的数组和高度最低的二叉树这两个关键词中就可以得到一些启发,类似与二分查找,将最中间的元素作为根节点,左边的元素插入到左子树,右边的元素插入到右子树即可,最后实现了一个二叉查找树。
代码如下:
#include <algorithm>#include <stdio.h>#include <time.h>struct node { int data; struct node * lchild; struct node * rchild;};//将数组转换为深度最低的二叉树,采用了二分查找的思想struct node* ConvertArrayToTree(int data[], int first, int last){ if (last < first) { return NULL; } else { int mid = ( last + first ) / 2; struct node * newNode = NULL; newNode = (struct node *)malloc(sizeof(struct node)); newNode->data = data[mid]; newNode->lchild = ConvertArrayToTree(data, first, mid - 1); newNode->rchild = ConvertArrayToTree(data, mid + 1, last); return newNode; }}//中序遍历void Traverse(struct node *root){ if (root == NULL) { return; } Traverse(root->lchild); printf("%d\t", root->data); Traverse(root->rchild); }int main(int argc, char* argv[]){ const int SIZE = 100; int data[SIZE]; int i, j; int flag = 1; struct node *head = NULL; srand(time(0)); for (i = 0; i < SIZE; i++) { data[i] = rand() % SIZE; flag *= -1; data[i] *= flag; } std::sort(data, data + SIZE); for (i = 0; i < SIZE; i++) { printf("%d\t", data[i]); } printf("\n"); head = ConvertArrayToTree(data, 0, SIZE - 1); Traverse(head); printf("\n"); return 0;}
- 将一个数组转换成深度最低的二叉树
- 将一个数组转换成深度最低的二叉树
- 【二叉树】将二叉搜索树转换成一个排序的双向链表
- 二叉树--将二叉搜索树转换成一个排序的双向链表
- 将一个十六进制的数组转换成一个十六进制数
- 将一个数组变成二叉树
- 将一个数组变成二叉树
- 剑指offer27---将二叉搜索树转换成一个排序的双向链表
- 将二叉搜索树转换成一个排序的双向链表
- 将二叉搜索树转换成一个排序的双向链表
- day17之将二叉搜索树转换成一个排序的双向链表
- 将二叉搜索树转换成一个排序的双向链表
- 将二叉搜索树转换成一个排序的双向链表
- 将二叉搜索树转换成一个排序的双向链表
- 将二叉搜索树转换成一个排序的双向链表
- 数据结构:将二叉搜索树转换成一个排序的双向链表
- 输入一颗二叉搜索树,将该二叉搜索树转换成一个排序的双向链表
- 将传入的对象转换成一个字节数组
- Jetspeed2学习笔记(三)(转载)
- 信号与系统的三种变换
- 可怕的$_SERVER
- Activity与Service通信之BroadcastReceive
- 职场智慧之程序员的职业规划
- 将一个数组转换成深度最低的二叉树
- DBA工具——DMV——如何知道TSQL语句已运行了多久
- Tomcat下JSP、Servlet和JavaBean环境的配置
- MTK6573电源管理(PM)小结
- PHP 中的 SimpleXML 处理
- 《JavaScript DOM编程艺术》学习回顾4
- tomcat 中文问题.
- 利用NamingContainer属性获取GridView行号【转】
- Jetspeed2学习笔记(四)(转载)