标签:
方法一:
1 #include <iostream>//创建二叉树,要用二级指针 2 3 using namespace std; 4 5 typedef struct TreeNode 6 { 7 char data; 8 struct TreeNode *left; 9 struct TreeNode *right; 10 }BiTree; 11 12 void creatBitree(BiTree **T) 13 { 14 char ch; 15 cin >> ch; 16 if (ch == ‘#‘) 17 { 18 *T = NULL; 19 } 20 else 21 { 22 *T = (BiTree*)malloc(sizeof(TreeNode)); 23 (*T)->data = ch; 24 cout << (*T)->data << endl; 25 creatBitree(&(*T)->left); 26 creatBitree(&(*T)->right); 27 } 28 } 29 30 int main(void) 31 { 32 BiTree *T = NULL; 33 creatBitree(&T); 34 35 return 0; 36 }
调试结果:
方法二:
1 #include <iostream>//这种做法是错的,没有用二级指针,二叉树是创建成功了,但是只在creatBitree中有效,退出该函数就被系统释放了。传递到函数的T只是一个副本。 2 3 using namespace std; 4 5 typedef struct TreeNode 6 { 7 char data; 8 struct TreeNode *left; 9 struct TreeNode *right; 10 }BiTree; 11 12 void creatBitree(BiTree *T)//但是这种方法将创建函数的参数改成引用就可以了:void creatBitree(BiTree * &T),(其他地方都不用改) 13 { 14 char ch; 15 cin >> ch; 16 if (ch == ‘#‘) 17 { 18 T = NULL; 19 } 20 else 21 { 22 T = (BiTree*)malloc(sizeof(TreeNode)); 23 T->data = ch; 24 cout << T->data << endl; 25 creatBitree(T->left); 26 creatBitree(T->right); 27 } 28 } 29 30 int main(void) 31 { 32 BiTree *T = NULL; 33 creatBitree(T); 34 35 return 0; 36 }
调试结果见方法四!!是一样的!!
方法三:这种方法与前两种不一样的是定义结构体的时候,就定义了一个结构体指针。
1 #include <iostream> 2 3 using namespace std; 4 5 typedef struct TreeNode 6 { 7 char data; 8 struct TreeNode *left; 9 struct TreeNode *right; 10 }*BiTree; 11 12 void creatBitree(BiTree *T)//其实此处就相当于一个二级指针,跟方法一类似,此处的BiTree已经是一个指针类型,方法一的只是普通类型。 13 { 14 char ch; 15 cin >> ch; 16 if (ch == ‘#‘) 17 { 18 *T = NULL; 19 } 20 else 21 { 22 *T = (BiTree)malloc(sizeof(TreeNode)); 23 (*T)->data = ch; 24 cout << (*T)->data << endl; 25 creatBitree(&(*T)->left); 26 creatBitree(&(*T)->right); 27 } 28 } 29 30 int main(void) 31 { 32 BiTree T = NULL;//此处相当于一个一级指针。 33 creatBitree(&T);//参数是一级指针的地址 34 35 return 0; 36 }
调试结果如下:
方法四:其实这种方法跟方法二一样,用一级指针,参数传递时用引用。
1 #include <iostream> 2 3 using namespace std; 4 5 typedef struct TreeNode 6 { 7 char data; 8 struct TreeNode *left; 9 struct TreeNode *right; 10 }*BiTree; 11 12 void creatBitree(BiTree &T) 13 { 14 char ch; 15 cin >> ch; 16 if (ch == ‘#‘) 17 { 18 T = NULL; 19 } 20 else 21 { 22 T = (BiTree)malloc(sizeof(TreeNode)); 23 T->data = ch; 24 cout << T->data << endl; 25 creatBitree(T->left); 26 creatBitree(T->right); 27 } 28 } 29 30 int main(void) 31 { 32 BiTree T = NULL; 33 creatBitree(T); 34 35 return 0; 36 }
调试结果如下:
标签:
原文地址:http://www.cnblogs.com/hhboboy/p/5557812.html