1.普通树双亲孩子表示法
#define MAX_TREE_SIZE 100typedef char ElemType;// 孩子结点typedef struct CTNode{int child; // 孩子结点的下标struct CTNode *next; // 指向下一个孩子结点的指针} *ChildPtr;// 表头结构typedef struct{ElemType data; // 存放在树中的结点的数据int parent; // 存放双亲的下标ChildPtr firstchild; // 指向第一个孩子的指针} CTBox;// 树结构typedef struct{CTBox nodes[MAX_TREE_SIZE]; // 结点数组int r, n;}
2.二叉树的建立和遍历算法
#include <stdio.h>#include <stdlib.h>typedef char ElemType;typedef struct BiTNode{char data;struct BiTNode *lchild, *rchild;} BiTNode, *BiTree;// 创建一棵二叉树,约定用户遵照前序遍历的方式输入数据CreateBiTree(BiTree *T){char c;scanf("%c", &c);if( ' ' == c ){*T = NULL;}else{*T = (BiTNode *)malloc(sizeof(BiTNode));(*T)->data = c;CreateBiTree(&(*T)->lchild);CreateBiTree(&(*T)->rchild);}}// 访问二叉树结点的具体操作,你想干嘛?!visit(char c, int level){printf("%c 位于第 %d 层\n", c, level);}// 前序遍历二叉树PreOrderTraverse(BiTree T, int level){if( T ){visit(T->data, level);PreOrderTraverse(T->lchild, level+1);PreOrderTraverse(T->rchild, level+1);}}int main(){int level = 1;BiTree T = NULL;CreateBiTree(&T);PreOrderTraverse(T, level);return 0;}
