您的位置:首页 > 其它

二叉树之调换左右孩子

2014-10-24 16:03 225 查看
1 # include<stdio.h>

struct dll{
struct Element* head;
int size;
};

struct Element{
int value;
struct Element* p;
struct Element* r;
};

typedef struct Element Element;
typedef struct dll dll;

void add(dll* m, int k){                 //添加树分支
Element* ptr;
ptr = (int *)malloc(10 * sizeof(int));
ptr->value = k;
ptr->r = NULL;
ptr->p = NULL;
Element* head = m->head;
while (1){
int a = ((head->value) > k);
int b = (head->p == NULL);
int c = (head->r == NULL);
if (a == 1)
{
if (b == 1)
{
head->p = ptr; break;
}
else
head = head->p;
}
else
{
if (c == 1)
{
head->r = ptr;  break;
}
else
head = head->r;
}
}
}
void init(dll* m, int k){                    //树初始化第一个元素
Element* ptr;
ptr = (int *)malloc(10 * sizeof(int));
ptr->value = k;
m->head = ptr;
ptr->r = NULL;
ptr->p = NULL;
m->size = m->size + 1;
}

void ChangLeftRight(dll* t){              //调换左右孩子
Element* m = t->head;
Ct(m);
}

int Ct(Element* t){
int tmp=0;
if ((t->p != NULL) && (t->r != NULL))
{
tmp = t->p->value;
t->p->value = t->r->value;
t->r->value = tmp;
}
if ((t->p != NULL))
Ct(t->p);
if ((t->r != NULL))
Ct(t->r);

if (t == NULL)
return 1;
}

void BlE(Element* k){
printf("%d ", k->value);
if (k->p != NULL)
BlE(k->p);
if (k->r != NULL)
BlE(k->r);
}

void Bl(dll* t){                   //前序遍历

Element* head;
head = (int *)malloc(10 * sizeof(int));
head = t->head;
BlE(head);

}

void main(){
dll* t;
t = (int *)malloc(20 * sizeof(int));
t->size = 0;
t->head = NULL;
init(t,30);
add(t, 6);
add(t, 2);
add(t, 5);
add(t, 56);
add(t, 36);
add(t, 9);
add(t, 98);
Bl(t);
ChangLeftRight(t);
printf("\n");
Bl(t);
system("pause");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐