【c++】 --数组转化成二叉树

数据结构一直就很差,一直搞不清那些树的节点和数组是怎么一一对应起来的,写个博客自己整理下思路。

二叉树的定义

二叉树是一种非常使用的非线性结构,具有以下两个特点:

  1. 非空二叉树只有一个根结点
  2. 每一个节点最多有两棵子树,分别称为该节点的左子树和右子树

二叉树的性质

性质1:在二叉树的第k层,最多有2k-1(k>=1)个结点
性质2:深度为m的二叉树最多有2m-1个结点
性质3:在任意一颗二叉树中,读书为0的结点(即就是叶子结点)总比度为2的结点多一个
性质4:具有n个结点的二叉树,其深度至少为[log2n]+1,其中[log2n]表示取log2n的整数部分

有序数组变成二叉树步骤:

如将有序数组[1,2,3,4,5,6,7,8,9]变成一棵二叉树


// - 首先定义每一个节点,每个节点包括自身值,左节点和右节点
struct Node
{
	int data;
	Node* _left;
	Node* _right;
}node;

 //- 采用递归的方法创建二叉树

typedef Node* bitree;
void BuildTree(bitree &T, int*a, int begin, int end)
{
	if (begin > end)
		return;
	int mid = (begin + end) / 2;
	if (T == NULL)  //为当前树的根结点申请空间
	{
		T = (Node*)malloc(sizeof(Node));
		T->data = a[mid];
		T->_left = NULL;
		T->_right = NULL;
	}
	BuildTree(T->_left, a, begin, mid - 1);
	BuildTree(T->_right, a, mid+1, end);
}
发布了33 篇原创文章 · 获赞 13 · 访问量 1053

猜你喜欢

转载自blog.csdn.net/Vicky_Cr/article/details/104451216