二叉树的操作定义
1、构造
2、查找
3、插入
4、遍历
5、求深度
二叉树的3个重要的性质
1、在二叉树的 i 层上至多有 个结点 ( i >= 1)
2、深度为 h 的二叉树至多有 个结点
3、度数为0的结点个数用 表示,度数为2的结点个数用
表示,则
二叉树顺序存储的明显缺点,在一般二叉树中,可能存在上图中的退化,会造成明显的空间浪费。
#include <iostream>
using namespace std;
/*
若一棵树的左子树所有的值都比根节点的值小,右子树的值都比根节点的值大
这样的二叉树,称之为二叉查找树(Binary search tree)
*/
/*
用顺序数组的形式,存储建立一个二叉搜索树
1、我们根据完全二叉树的编号,将第一个元素存入下标1的位置
2、得到根元素之后,开始建立这样的二叉树
若元素的值大于根节点,则将元素往根节点的右子节点移动,若此节点为空则存入,
否则,知道找到为空的位置
若元素的值小于根节点,则将元素往根节点的左子节点移动,值到找到为空的位置存入
寻找节点的左右子结点:
左结点 = 父结点 X 2
右结点 = 父结点 X 2 + 1
*/
void create_btree(int b_tree[], int nodelist[], int len)
{
//树的层级,用这个level去推进计算将要插入的数字的下标
//即确定它在树中的位置
int level;
//规定下标从1开始,下标0中不存数据
b_tree[1] = nodelist[1];
for (int i = 2; i < len; i++) {
level = 1;
while (b_tree[level] != 0) { /// 0 表示当前的子树位置是空的
if (nodelist[i] < b_tree[level]) {
level = level * 2;
}
else {
level = level * 2 + 1;
}
}
b_tree[level] = nodelist[i];
}
}
int main()
{
int b_tree[16] = {};
int nodelist[16] = {
0, 6, 3, 8,
5, 2, 9, 4,
7, 10,0, 0,
0, 0, 0, 0
};
create_btree(b_tree, nodelist, 16);
for (int i = 1; i < 16; i++) {
cout << i << " -> " << b_tree[i] << endl;
}
return 0;
}
创建的搜索二叉树