zoukankan      html  css  js  c++  java
  • 创建二叉树、创建链表等

     方法一:
    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));//*T = new BiTree;或*T = new 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));//T = new TreeNode;或T = new BiTree; 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));//*T = new 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));//T = new 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 }
    调试结果如下:
    
    
  • 相关阅读:
    netty源码深度分析
    《深入探索Netty原理及源码分析》文集小结
    Netty 那些事儿 ——— 心跳机制
    CSS实现单行、多行文本溢出显示省略号(…)
    测试
    PHP 二维数组根据某个字段排序
    PHP生成图片验证码、点击切换实例
    正确设置网站title、keywords、description(转载)
    nginx上支持.htaccess伪静态的配置实例
    百度编辑器Ueditor增加字体的修改方法
  • 原文地址:https://www.cnblogs.com/hhboboy/p/5557812.html
Copyright © 2011-2022 走看看