严蔚敏数据结构中二叉树的结构体定义中的*BiTree小疑惑


不废话,直接上代码解释:

#include
#include "malloc.h"
typedef char ElemType;
typedef struct BiNode{
	ElemType data;
	struct BiNode *lchild;
	struct BiNode *rchild;
}BiNode,*BiTree;
BiTree preOrderCreateBiTree(){  //先序建立二叉树方法一
	char ch;
	BiTree T;
	scanf("%c",&ch);
	if (ch=='#'){
		T = NULL;
	}
	else{
		T = (BiTree)malloc(sizeof(BiNode));//!!!是指针类型的节点
		T->data = ch;
		T->lchild = preOrderCreateBiTree();
		T->rchild = preOrderCreateBiTree();
		
	}
	return T;
}

void preOrderCreateTree2(BiTree *T){  //这里传进去的是指针的指针,就是指向树根的指针的地址,那么(*T)就是指针的地址了,(*T)是指针
	char ch;
	scanf("%c", &ch);
	if ('#' == ch){
		*T = NULL;
	}
	else{
		*T = (BiTree)malloc(sizeof(BiNode));
		(*T)->data = ch;
		preOrderCreateTree2(&((*T)->lchild));//根据函数定义这里要传地址
		preOrderCreateTree2(&((*T)->rchild));
	}
}

void preOrderTraverse(BiTree T){//这里传入的T是指针!!!;定义*BiTree的时候就是指针类型的别名,那么BiTree定义的都是指针
	printf("%c",T->data);
	preOrderTraverse(T->lchild);
	preOrderTraverse(T->rchild);
}

你可能感兴趣的:(严蔚敏数据结构中二叉树的结构体定义中的*BiTree小疑惑)