C語言二叉樹的建立
阿新 • • 發佈:2019-01-07
#include<malloc.h>
typedef struct Node {
struct Node *left;
struct Node *right;
int value;
} Node;
Node* init_root(int value) {//初始化根節點的值。
Node* rr;
rr = malloc(sizeof(Node));
rr->right = NULL;
rr->left = NULL;
rr->value = value;
return rr;
}
void insert_node(Node *p, int value) {//將一個值為value的數插入到這個樹中,但是要注意,需要插到那個地方,按照排序二叉樹的要求來。
Node* a = malloc(sizeof(Node));
a->left = NULL;//這兩行一開始我沒有,出現了嚴重的記憶體洩漏,我還一直找不到哪裡錯了,以後一定要一動態申請就初始化NULL
a->right = NULL;
while (1) {
if (value > p->value) {
if (p->right == NULL) {
p->right = a;
a->value = value;
break;
} else {
p = p->right;
}
}
if (value < p->value) {
if (p->left == NULL) {
p->left = a;
a->value = value;
break;
} else {
p = p->left;
}
}
}
return;
}
void traverse_tree_inorder(Node *p) {//中序遍歷這個二叉樹,按照升序輸出,每個數之間有一個空格,最後一個數後也有一個空格 if (p != NULL) {
traverse_tree_inorder(p->left);
printf("%d ", p->value);
traverse_tree_inorder(p->right);
}
}
void recycle_nodes(Node *p) {//。回收建立二叉樹時開闢的記憶體空間,提示類似後序遍歷
if (p != NULL) {
recycle_nodes(p->left);
recycle_nodes(p->right);
free(p);
}
}
typedef struct Node {
struct Node *left;
struct Node *right;
int value;
} Node;
Node* init_root(int value) {//初始化根節點的值。
Node* rr;
rr = malloc(sizeof(Node));
rr->right = NULL;
rr->left = NULL;
rr->value = value;
return rr;
}
void insert_node(Node *p, int value) {//將一個值為value的數插入到這個樹中,但是要注意,需要插到那個地方,按照排序二叉樹的要求來。
Node* a = malloc(sizeof(Node));
a->left = NULL;//這兩行一開始我沒有,出現了嚴重的記憶體洩漏,我還一直找不到哪裡錯了,以後一定要一動態申請就初始化NULL
a->right = NULL;
while (1) {
if (value > p->value) {
if (p->right == NULL) {
p->right = a;
a->value = value;
break;
} else {
p = p->right;
}
}
if (value < p->value) {
if (p->left == NULL) {
p->left = a;
a->value = value;
break;
} else {
p = p->left;
}
}
}
return;
}
void traverse_tree_inorder(Node *p) {//中序遍歷這個二叉樹,按照升序輸出,每個數之間有一個空格,最後一個數後也有一個空格 if (p != NULL) {
traverse_tree_inorder(p->left);
printf("%d ", p->value);
traverse_tree_inorder(p->right);
}
}
void recycle_nodes(Node *p) {//。回收建立二叉樹時開闢的記憶體空間,提示類似後序遍歷
if (p != NULL) {
recycle_nodes(p->left);
recycle_nodes(p->right);
free(p);
}
}