
#include<stdio.h>
#include<stdlib.h>
//二叉鏈表
//typedef struct BitLink {
// int data;
// struct BitLink* leftChild; //左指針
// struct BitLink* rightChild; //右指針
//}bitlink;
//用二叉鏈表存儲方式建樹
typedef struct BitTree {
int data;
struct BitTree* LChild; //左子樹
struct BitTree* RChild; //右子樹
}bittree;
bittree* createBitTree(bittree* BT) {
BT = (bittree*)malloc(sizeof(bittree));
BT->data = 1;
BT->LChild = (bittree*)malloc(sizeof(bittree));
BT->RChild = (bittree*)malloc(sizeof(bittree));
BT->LChild->data = 2;
BT->LChild->RChild = NULL;
BT->RChild->data = 3;
BT->RChild->LChild = NULL;
BT->RChild->RChild = NULL;
BT->LChild->LChild = (bittree*)malloc(sizeof(bittree));
BT->LChild->LChild->data = 4;
BT->LChild->LChild->LChild= NULL;
BT->LChild->LChild->RChild = NULL;
return BT;
}
void main() {
bittree* myBT = NULL;
myBT = createBitTree(myBT);
printf("樹的根節點是:%d\n", myBT->data);
printf("樹的葉子節點是:%d,%d\n", myBT->LChild->LChild->data, myBT->RChild->data);
}

使用遞歸的方式建立:
#include<stdio.h>
#include<stdlib.h>
//用二叉鏈表存儲方式建樹(完全二叉樹)
typedef struct BitTree {
int data;
struct BitTree* LChild; //左子樹
struct BitTree* RChild; //右子樹
}bittree;
//創建二叉樹
bittree* createBitTree(bittree* BT) {
int num = 0;
scanf("%d", &num);
if (num != -1) { //輸入-1代表結束
BT = (bittree*)malloc(sizeof(bittree));
BT->data = num;
printf("輸入%d的左結點值:", BT->data);
BT->LChild=createBitTree(BT->LChild);
printf("輸入%d的右結點值:", BT->data);
BT->RChild=createBitTree(BT->RChild);
return BT;
}
}
void main() {
bittree* myBT = NULL;
myBT=createBitTree(myBT);
printf("樹的根結點是:%d\n", myBT->data);
printf("樹的根結點的左結點是:%d\n", myBT->LChild->data);
printf("樹的根結點的右結點是:%d\n", myBT->RChild->data);
}

