D={A, B, C, D, E, F, G}
S={<A,B>, <A,C>, <B,D>, <B,E>, <C,F>, <C,G>}
3.二叉树的特点若树中左子女的值都小于根节点的值,右子女的值都大于根节点的值,这样的二叉树叫做二叉搜索树。
9.二叉树的数组实现方式
分析:首先给定一个二叉树之后,就可以知道该二叉树的层次数h,然后创建一个2^h = 2^h - 1 + 1个元素的数组,加1的目的是因为数组的0下标是不用的,根节点存放在下标为1的单元中。所有数组中没有用到的单元,均赋值为二叉树中数值域不包含的值,这样在遍历的时候就可以将这个值作为判断的依据。
#include <stdio.h>
void create_btree(int list[], int bt[], int n) /*n表示list数组中元素的个数*/
{
int i, order;
bt[1] = list[0];
for(i = 1; i < n; i++)
{
order = 1; /*每次进来从根结点开始比较*/
while(bt[order] != 0)
{
if(list[i] < bt[order])
order *= 2;
else
order = order*2 + 1;
}
bt[order] = list[i];
}
}
int main()
{
int list[7] = {30, 18, 16, 25, 34, 7, 31};
int bt[16] = {0};
int i;
create_btree(list, bt, 7);
for(i = 0; i < 16; i++) /*按层输出*/
if(bt[i] != 0)
printf("%4d", bt[i]);
printf("\n");
return 0;
}程序的输出结果:
二叉树的链表实现:
#include <stdio.h>
#include <malloc.h>
#define NULL 0
typedef struct tree
{
int data;
struct tree *left, *right;
}ElemBT;
void create_btree(ElemBT *root, int list[], int n) /*n表示list数组中元素的个数*/
{
int i;
ElemBT *current, *parent, *p;
for(i = 1; i < n; i++)
{
p = (ElemBT *)malloc(sizeof(ElemBT));
p->left = p->right = NULL;
p->data = list[i];
current = root;
while(current != NULL)
{
parent = current;
if(current->data > p->data)
current = current->left;
else
current = current->right;
}
if(parent->data > p->data)
parent->left = p;
else
parent->right = p;
}
}
int main()
{
int list[7] = {30, 18, 16, 25, 34, 7, 31};
ElemBT *root;
root = (ElemBT *)malloc(sizeof(ElemBT));
root->data = list[0];
root->left = root->right = NULL;
create_btree(root, list, 7);
return 0;
}二叉树(一)——二叉树的基本实现(数组实现和链表实现),布布扣,bubuko.com
原文地址:http://blog.csdn.net/laoniu_c/article/details/38385259