1. 二叉树数据结构
typedef struct TreeNode{
int value;
struct TreeNode* leftChild;
struct TreeNode* rightChild;
}BiTNode, BiTree;
2. 创建二叉树
// 递归创建
void CreateBiTree(BiTree & T) {
int value = getData(); // 获取数据
BiTNode* T;
if (! T = (BiTNode*)malloc(sizeof(BiTNode))) {
exit(0);
}
else {
T->value = value;
CreateBiTree(T->leftChild);
CreateBiTree(T->rightChild);
}
}
3. 遍历二叉树
关键在于递归。
- 先序遍历
void PreOrderVisit(BiTree T){
if (T != NULL) {
printf("%d ", T.value);
PreOrderVisit(T->leftChild);
PreOrderVisit(T->rightChild);
}
}
- 中序遍历
void InOrderVisit(BiTree T){
if (T != NULL) {
PreOrderVisit(T->leftChild);
printf("%d ", T.value);
PreOrderVisit(T->rightChild);
}
}
- 后序遍历
void PreOrderVisit(BiTree T){
if (T != NULL) {
PreOrderVisit(T->leftChild);
PreOrderVisit(T->rightChild);
printf("%d ", T.value);
}
}
4. 树的存储结构
- 双亲表示法
typedef struct PTNode{
int value;
int parent; //双亲位置域
}PTNode;
typedef struct {
PTNode nodes[size];
int i, n; // 根的位置和节点数
}
2. 孩子表示法
typedef struct CTNode{ // 子节点
int child;
struct CTNode* next;
} * ChildPtr;
typedef struct {
int value;
ChildPtr firstChild; // 孩子链表指针头结点
}CTBox;
typedef struct {
CTBox nodes[size];
int n, r; // 节点数和根的位置
}CTree;
- 孩子兄弟表示法
typedef struct CSNode{
int value;
struct CSNode * firstChild, *nextsibling;
}CSChild, *CSTree;