//从数组a中建立小堆的 2种方法
void heapsort(int* a, int n, int k)
{
for (int i = 1; i < n; i++)
{
AdjustUp(a, i);
}
}
void heapsort1(int* a, int n, int k)
{
int end = (n - 1 - 1) / 2;
for (end; end >= 0; end--)
{
AdjustDown(a, n,end);
}
}
void heapsort3(int* a, int n)
{
//先建立一个大堆
int i = 1;
for (i ; i < n; i++)
{
AdjustUp(a, 1);
}
int end = n - 1;
for (end; end >= 0; end--)
{
Swap(&a[end], &a[0]);
AdjustDown(a, end, 0);
}
}
int main() {
int a[] = { 1,2,3,5,4,7,5,6,1 };
int sz = sizeof(a) / sizeof(a[0]);
heapsort3(a, sz);
for (int i = 0; i < sz; i++)
{
printf("%d ", a[i]);
}
system("pause");
return 0;
}
建立堆的时间复杂度是O(N);
普通二叉树的增删查改是没有价值的 因为用来存取数据 太复杂
价值体现再 搜索二叉树 HUFFMAN tree
二叉树的前序中序和后序的遍历
前序遍历 : 根节点 左子树 右子树
中序遍历 左子树 根节点 右子树
后序遍历 左子树 右子树 根节点
// 二叉树前序遍历
void PreOrder(BTNode* root)
{
if (root == NULL){
printf("NULL ");
return;
}
printf("%c ", root->data);
PreOrder(root->left);
PreOrder(root->right);
}
// 二叉树中序遍历
void InOrder(BTNode* root)
{
if (root == NULL){
printf("NULL ");
return;
}
InOrder(root->left);
printf("%C ", root->data);
InOrder(root->right);
}