一、二叉树的链式结构
链式结构是二叉树最常用的存储方式,主要分为二叉链和三叉链。本阶段主要讲解二叉链的实现。
// 链式二叉树的节点定义
typedef struct BinaryTree {
Elemtype data;
struct BinaryTree* leftChild;
struct BinaryTree* rightChild;
} BTNode;
每个节点包含数据域和两个指针域(左子树、右子树),通过指针直接定位子节点地址。
二、二叉树的创建
在掌握基本性质后,我们手动构建一棵二叉树来演示操作。
2.1、创建二叉树节点
节点创建与链表类似,需申请内存并初始化指针。
// 创建新节点
BTNode* BuyNode(Elemtype data) {
BTNode* newNode = (BTNode*)malloc(sizeof(BTNode));
if (newNode == NULL) {
perror("create new node fail!\n");
}
newNode->data = data;
newNode->leftChild = newNode->rightChild = NULL;
return newNode;
}
注意:创建完成后务必返回节点地址,否则后续无法访问。
2.2、二叉树节点的链接
通过 BuyNode 生成节点后,手动连接左右子树指针。
BTNode* createNewBT() {
BTNode* NodeA = BuyNode('A');
BTNode* NodeB = BuyNode('B');
BTNode* NodeC = BuyNode('C');
BTNode* NodeD = BuyNode('D');
BTNode* NodeE = BuyNode('E');
BTNode* NodeF = BuyNode('F');
BTNode* NodeG = BuyNode('G');
BTNode* NodeH = BuyNode('H');
BTNode* NodeI = BuyNode('I');
BTNode* NodeO = BuyNode();
NodeA->leftChild = NodeB; NodeA->rightChild = NodeC;
NodeB->leftChild = NodeD; NodeB->rightChild = NodeE;
NodeD->leftChild = NodeH; NodeC->leftChild = NodeF;
NodeF->leftChild = NodeI; NodeH->leftChild = NodeO;
NodeA;
}



