定义:
二叉搜索树就是左儿子节点的VALUE大,比右儿子的VALUE小的一颗二叉树。给定一个值能够在拥有此性质的树中进行快速搜索。
二叉树的插入:
直接在相应位置插入即可。如果根节点的左右两颗树层数相差过多的话,性能不好,O(n),所以需要进行平衡二叉树,在此后说。
由PAT甲级中的一道题想到。Build A Binary Search Tree (30)
//建立一颗二叉树
void Build(Tree *parent)
{
parent->value = -1;
int n1, n2;
cin >> n1 >> n2;
if (n1 != -1)
{
parent->leftChild = (Tree*)malloc(sizeof(Tree));
Build(parent->leftChild);
}
else
parent->leftChild = NULL;
if (n2 != -1)
{
parent->rightChild = (Tree*)malloc(sizeof(Tree));
Build(parent->rightChild);
}
else
parent->rightChild = NULL;
}
层序遍历:
void PrintSpace()
{
static int k = 0;
k++;
if (k != N)
cout << ' ';
}
void Display(Tree *root)
{
vector<Tree*> open;
vector<Tree*> temp;
open.push_back(root);
int count = 0;
while (open.size() != 0)
{
temp.clear();
for (int i = 0; i < open.size(); i++)
{
if (open[i] != NULL)
{
cout << open[i]->value;
count++;
if (count != N)
cout << ' ';
}
if(open[i]->leftChild != NULL)
temp.push_back(open[i]->leftChild);
if(open[i]->rightChild != NULL)
temp.push_back(open[i]->rightChild);
}
open = temp;
}
}
for (int i = 0; i < N; i++)
{
cin >> data[i];
}
while (data.size() != 0)
{
int min = data[0], index = 0;
for (int i = 1; i < data.size(); i++)
{
if (data[i] < min)
{
min = data[i];
index = i;
}
}
Insert(min, root);
data.erase(data.begin() + index);
}