写了这个算法,总算有点理解二级指针了。 #include < stdio.h > #include < stdlib.h > #define OVERFLOW -2 #define INFEASIBLE -1 #define ERROR 0 #define OK 1 #define TRUE 1 #define FALSE 0 typedef int TElemType;TElemType Nil = 0 ;typedef struct BiTNode ... { TElemType data; BiTNode *lchild,*rchild;} BiTNode, * BiTree; int InitBiTree(BiTree * T) ... { *T=NULL; return OK;} void CreateBiTree(BiTree * T) ... { TElemType ch; scanf("%d",&ch); if(ch==Nil) (*T)=NULL; else ...{ (*T)=(BiTree)malloc(sizeof(BiTNode)); if(!(*T)) exit(OVERFLOW); (*T)->data=ch; CreateBiTree(&(*T)->lchild); CreateBiTree(&(*T)->rchild); }} int BiTreeEmpty(BiTree * T) ... { // 初始条件: 二叉树T存在 // 操作结果: 若T为空二叉树,则返回TRUE,否则FALSE if(*T) return FALSE; else return TRUE; } TElemType Root(BiTree * T) ... { // 初始条件: 二叉树T存在。操作结果: 返回T的根 if(BiTreeEmpty(&(*T))) return Nil; else return (*T)->data; } void main() ... { TElemType e; BiTNode* T; InitBiTree(&T); printf("请先序输入二叉树(如:1 2 0 0 0表示1为根结点,2为左子树的二叉树) "); CreateBiTree(&T); e=Root(&T); if(e==0)printf("二叉树无根节点!/n"); else printf("二叉树根结点:%d ",e); } 因为在CreateBiTree() 中会分配内存给数据,所以主函数内不进行内存分配,即不按如下定义: BiTNode T;