使用数组的方法建立一颗二叉树

说明:使用数组的方法建立一颗二叉树

例如有一个数组 int p[7] = { 0, 1, 2, 3, 4, 5, 6 };那么如何把这个数组建立成一颗二叉树呢?请看下面的代码。

/***************************************************************************
*	@file:		main.cpp
*	@author:	ugly_chen
*	@date:		2015.1.3
*	@remark:    this code is for binary tree with array
*	@note
****************************************************************************/

#include<iostream>

using namespace std;

struct binary_tree_node
{
	int data;
	binary_tree_node* left_child;
	binary_tree_node* right_child;
};

void create_tree(binary_tree_node* &tree, int a[], int len, int index)
{
	if (index >= len)
		return;
	tree = new binary_tree_node;
	tree->data = a[index];
	tree->left_child = NULL;
	tree->right_child = NULL;
	create_tree(tree->left_child, a, len, 2 * index + 1);
	create_tree(tree->right_child, a, len, 2 * index + 2);
}

void Print(binary_tree_node* p)
{
	if (NULL == p)
		return;
	cout << p->data;
	Print(p->left_child);
	Print(p->right_child);
}

int main()
{
	int p[7] = { 0, 1, 2, 3, 4, 5, 6 };
	binary_tree_node*tree;
	create_tree(tree, p, 7, 0);
	Print(tree);
	return 0;
}
时间: 2024-08-09 10:36:24

使用数组的方法建立一颗二叉树的相关文章

数组去重方法总结

这几天正在整理面试题,顺便把以前学的东西给总结一下,数组去重,我猜面试应该考的几率还是蛮高的,所以下面就让博主给讲讲iOS数组去重的几种方法. 第一种:冒泡排序,然后挨个挨个比较,这个没什么可说的,关键是麻烦,而且时间复杂度也挺大的,所以博主就不给讲了. 第二种:利用数组排序. NSArray *array = @[@"小玉",@"小小鱼",@"小玉"]; //数组去重方法---方法1 //建立一个新的的可变数组,数组长度为0 NSMutable

数组去重方法

数组去重方法 常规方法 思路 构建一个新的数组用来存放结果 for循环中每次从原数组取出一个元素,用这个元素循环与结果数组对比 若结果数组中没有该元素,则存到结果数组中 Array.prototype.unique = function() { var res = [this[0]]; for (var i = 1; i < this.length; i++) { var repeat = false; for (var j = 0; j < res.length; j++) { if (th

【3】输入一颗二叉树判断是不是平衡二叉树

题目:输入一颗二叉树的根结点,判断该二叉树是不是平衡二叉树.平衡二叉树是满足所有结点的左右子树的高度差不超过1的二叉树 方案一:遍历数组的每一个结点,对每一个结点求它的左右子树的高度并进行判断.时间复杂度大于O(n),小于O(n^2)效率较低,因为有很多点需要重复访问. //二叉树的结点 struct BinaryTreeNode{ int m_value; BinaryTreeNode *m_lson; BinaryTreeNode *m_rson; }; //求二叉树的深度 int GetD

Es6中如何使用splic,delete等数组删除方法

Es6中如何使用splic,delete等数组删除方法 1:js中的splice方法 splice(index,len,[item])    注释:该方法会改变原始数组. splice有3个参数,它也可以用来替换/删除/添加数组内某一个或者几个值 index:数组开始下标        len: 替换/删除的长度       item:替换的值,删除操作的话 item为空 如:arr = ['a','b','c','d'] 删除 ----  item不设置 arr.splice(1,1)   /

中序与后序或者前序都可以确定一颗二叉树 一点点dfs

中序与后序或者前序都可以确定一颗二叉树原理:  中序是 访问顺序是左子树 根 右子树 后续是 左子树 右子树 根 所以一棵二叉树如果给了后续的信息 可以把树根确定下来 带入中序的信息中 找出左右子树 再带回后续的信息找这样反复,也就是递归下去,可以把树给确定下来. DFS  大概可以用于 又要向下延伸 又要左右延伸  比如 枚举 ,搜索 都可以用:

数组求和方法汇总

var arr = [1, 2, 3, 4, 5, 6];测试时我不想过度使用全局变量影响命名空间,所以没使用未声明变量.而是直接通过私有作用域设置静态私有变量,也可以用其他设计模式来限定变量作用域.因为数组对象的迭代方法也是一种遍历,所以也可以借助用来实现求和.一.利用数组对象的各迭代方法:1.array.every()查询是否有所有项都匹配的方法: 1 (function() { 2 var sum = 0; 3 4 function getSum(item, index, array) {

浅论C++数组传入方法后不能用sizeof计算到正确的数组大小

C++中我们经常会用到sizeof()来计算数组的大小 例如: 1 #include<iostream> 2 using namespace std; 3 4 void Length(int *p) 5 { 6 cout<<sizeof(p)<<" "<<sizeof(int)<<endl; 7 } 8 9 int main() 10 { 11 int n; 12 int pirce[] = {0,1,5,8,9,10,17,

IOS 开发中遍历数组的方法及比较

数组,做为一种常用的数据类型,频繁出现在编码中,其中肯定少不了对数组的遍历,本博文对数组遍历,进行一下自己的归纳,如果是大牛,一笑而过就好,互相学习,欢迎指正. 话不多说直接进入主题 首先创建一个数组 /** 获取系统的语言数组 */ NSArray *languageArray = [[NSUserDefaults standardUserDefaults] arrayForKey:@"AppleLanguages"]; for 循环-C语言 因为在xCode 编译中支持C 语言,

一些ES5的操作数组的方法

在ES5规范中新增了不少操作数组的方法,特此罗列一下以备使用 1. forEach循环 有点类似jQuery的each循环 [12,23,36,4,5].forEach(function(v,k){ console.log(v)   得到元素值,    12,23,36,4,5 console.log(k)   得到元素下标 ,0,1,2,3,4 }) 方便在不借助三方库的情况下遍历各类数组 2.filter过滤器 用于筛选元素 var arr = [12,23,36,4,5].filter(f