数据结构期中反思
程序员文章站
2024-01-17 18:11:10
...
期中考之后,自己读代码和读题的能力都不够。
由于是英文的试卷,所以忽略了一些题干的要求,不像中文那么敏感。
读代码存在想当然的问题,先入为主,遇到自己不擅长并且不确定的边界条件的时候,举一些具体的实例来判断。
错题:
1.
这是一个有头结点的链表,cnt数的是节点(不含头结点)的个数,读取的时候读到的是第pos个位置,也就是倒数第k个位置。
2.判断一棵树是否为满树。
自己的做法是递归判断是否有左子树和右子树。但是这样忽略了所有叶节点要在一层的要求。
正确的应该是递归得到节点个数n以及深度h判断是否满足 n = 2^h -1
#include<stdio.h>
#include<stdlib.h>
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild; //left,right child pointer
}BiTNode,*BiTree;
void start(){
printf("按照先序遍历的方式输入你的树。\n");
printf("不存在的元素以#替代。\n");
}
int CreateBiTree(BiTree &T){
char ch;
//scanf("%c",&ch);
ch=getchar();
if(ch == '#') T =NULL;
else{
if(!(T=(BiTNode*)malloc(sizeof(BiTNode)))) return 1;
else {
T->data = ch;
}
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return 0;
}
int getDepth(BiTree T){
if(T){
int a = getDepth(T->lchild); //the deepth of lchild
int b = getDepth(T->rchild); //the deepth of rchild
return a>b? (a+1):(b+1);
}
else return 0;
}
void Count(BiTree T,int &i){
if(T){
i++;
Count(T->lchild,i);
Count(T->rchild,i);
}
}
int main(){
start();
BiTree T;
CreateBiTree(T);
int depth = getDepth(T);
int num;
Count(T,num);
printf("%d %d\n",depth,num);
if(num==(depth*depth-1))
printf("这棵树是满树。\n");
else printf("这棵树不是满树。\n");
}
期中确实是一个教训,接下来继续加油了。
今日看到一句话,如果目标是星星,那么及时掉下来也会落在树上。