欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据结构期中反思

程序员文章站 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");
}

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

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


上一篇: CodinGame: Temperatures 反思

下一篇: