数据结构期中反思

期中考之后,自己读代码和读题的能力都不够。
由于是英文的试卷,所以忽略了一些题干的要求,不像中文那么敏感。
读代码存在想当然的问题,先入为主,遇到自己不擅长并且不确定的边界条件的时候,举一些具体的实例来判断。

错题:
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");
}

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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值