typedef struct Node
{
char data;
struct Node *lchild;
struct Node *rchild;
}Node;
void CreateTree(Node **T)
{
char ch ;
cin >> ch ;
*T = new Node;
if(ch == '0')
{
*T = NULL;
return;
}
else
{
(*T)->data = ch;
cout << (*T)->data << "的左子树为" << endl;
CreateTree(&((*T)->lchild));
cout << (*T)->data << "的右子树为" << endl;
CreateTree(&((*T)->rchild));
}
}
int main()
{
Node *T;
CreateTree(&T);
}
typedef struct Node{
int data ;
struct Node *next ;
}Node;
typedef struct List{
Node *head ;
int count ;
}List ;
//初始化
void init(List * L){
//分个头结点
L->head = (Node*)malloc(sizeof(Node)) ;
if(!L->head){
exit(1) ;
}
L->head->next = NULL ;
L->head->data = -1 ;
}
void add(List *L , int data){
Node *newNode = (Node*)malloc(sizeof(Node)) ;
newNode->data = data ;
newNode->next = NULL ;
Node *p = L->head ;
while(p->next){
p = p->next ;
}
p->next = newNode ;
L->count++ ;
}
原因:树创建*T = new Node;是为树当前的节点创建一个Node的空间,使节点为新分配的Node空间;
而链表的创建
Node newNode = (Node)malloc(sizeof(Node)) ;
p->next = newNode ;只是给当前节点中的指针域赋值。
所以树的创建改变的是节点本身,重新为节点分配空间。链表的创建是改变节点的指针域所指空间(即改变的是节点的内容)。
总结:如果需要改变的是变量的内容就用一级指针,如果改变的是变量所在空间就用二级指针。