标签:二叉树的深度 输入 视频 false 构造 class 使用 原因 一点
第五章的中,我们学习了树和二叉树,相比前面的内容,我感觉这部分会难一点点,特别是树的存储结构,根据不同情况会有各种存储结构,如果理解不够深刻,在后面使用这个结构体来完成代码的时候就会遇到挺多麻烦的。在这次小组合作中,我开始写的代码是这样的(我贴一下这个定义和构造树的函数),我这里是想用child指向第一个孩子结点,剩下的孩子结点串成链表接上去,但是事实是,操作贼麻烦,而且,也没接上。后来查了查,发现,其实还可以再弄一个结构体,来放剩下的非第一个孩子结点的结点,这样操作会更简单。
typedef struct node { int data; struct node *child; }node; typedef struct { node num[100001]; int root; }tree; //构造树 void Creat(tree &t, int n) { bool check[100001] = {false};//找根结点 for(int i=1; i<=n; i++) { int m; cin >> m; if(m==0) continue;//如果0个孩子,就直接跳出这次循环,进行下一次就好了 if(m==1)//如果一个孩子,直接输入 { cin >> t.num[i].data; t.num[i].child=NULL; check[t.num[i].data]=true; } if(m>=2)//2个以上孩子 { cin >> t.num[i].data;//先输入第一个孩子的数据 check[t.num[i].data] = true; node *l = new node;//l链表用来放剩下的孩子,l有头结点 node *p;//辅助指针,每次循环结束指向最后输入的孩子的指针域 p=l->child; for(int j=1; j<m; j++) { node *s = new node; cin >> s->data; check[s->data] = true; p = s; p = p->child; } p=NULL; t.num[i].child = l->child; } } for(int i=1; i<=n; i++) { if(check[i]==false) { t.root=i; break; } } }
在遍历二叉树那里,开始学习的时候遇到一些麻烦,特别是计算二叉树的深度时,最后一句:return NodeCount(T->lchile)+NodeCount(T->rchile),后来画了图,并且通过手动编译来一步步知道了这句会怎么运行。
在5.6那一节中,感觉孩子兄弟法有点抽象。
对于本次作业和实践,看完带你打代码的视频,我又把代码自己复现了一遍来加深印象,数的同构那道代码没能自己独立打出来,最后是在网上找了参考资料自己模仿,完成了代码。
第五章学习,没有之前4章这么顺利,因此,要反省一下自己做不好的原因,在下一章要更好得完成学习任务。
标签:二叉树的深度 输入 视频 false 构造 class 使用 原因 一点
原文地址:https://www.cnblogs.com/Jacqueline--/p/13020481.html