数据结构期中反思

来源:互联网 发布:肯德基麦当劳知乎 编辑:程序博客网 时间:2024/06/07 05:54
期中考之后,自己读代码和读题的能力都不够。
由于是英文的试卷,所以忽略了一些题干的要求,不像中文那么敏感。
读代码存在想当然的问题,先入为主,遇到自己不擅长并且不确定的边界条件的时候,举一些具体的实例来判断。

错题:
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 lchildint b = getDepth(T->rchild); //the deepth of rchildreturn 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");}

期中确实是一个教训,接下来继续加油了。

今日看到一句话,如果目标是星星,那么及时掉下来也会落在树上。