/* 二叉树的链接表示*/ #include #include typedef int DataType; struct BinTreeNode; /* 二叉树中结点 */ typedef struct BinTreeNode *PBinTreeNode; /* 结点的指针类型 */ struct BinTreeNode { DataType info; /* 数据域 */ PBinTreeNode llink; /* 指向左子女 */ PBinTreeNode rlink; /* 指向右子女 */ }; typedef struct BinTreeNode *BinTree; typedef BinTree *PBinTree; PBinTreeNode root_btree(PBinTree t) { return *t; } PBinTreeNode leftChild_btree (PBinTreeNode p) { return p->llink; } PBinTreeNode rightChild_btree (PBinTreeNode p) { return p->rlink; } /*以下算法就是先将二叉树扩充为扩充的二叉树, 然后按先根次序周游的顺序输入结点的信息, 生成一个双链存储的二叉树的过程*/ /* 递归创建从根开始的二叉树 */ PBinTreeNode createRest_BTree() { PBinTreeNode pbnode; char ch; scanf("%c", &ch); if(ch == '@') pbnode = NULL; else { pbnode = (PBinTreeNode )malloc(sizeof(struct BinTreeNode)); if( pbnode == NULL ) { printf("Out of space!\n"); return pbnode; } pbnode->info = ch; pbnode->llink = createRest_BTree(); /* 构造左子树 */ pbnode->rlink = createRest_BTree(); /* 构造右子树 */ } return pbnode; } /* 创建完整的二叉树 */ PBinTree create_BTree( void ) { PBinTree pbtree; pbtree = (PBinTree)malloc(sizeof(BinTree)); if (pbtree != NULL) *pbtree = createRest_BTree( ); /* 递归创建从根开始的二叉树 */ return pbtree; } int main(){ return 0; }