两个书上的题目

关于二叉书的问题:

1.今天看了一个算法,很多问题都可以转化成为相应的数学问题,应该注意分析题目。就是小球下落问题:二叉书所有叶子节点的深度相同,从1节点放一个小球,节点为开关,每次小球落到一个开关,开关状态改变(开或者关),关->球左走   开->球右走

输入球的序号,得到其位于的叶子节点的序号

这里可以使用树形结构来解决,但是如果节点的书目过大的话就速度会慢,分析: 根据序号可以得出其是S 为节点的左树还是右树,并且还能得到该球是该左(右)树上第几个到达的球,再次利用上面的思路就可以很快求出,这就转换为一道数学题.

 

2.二叉树:

前序,中序得到后序列的题目:

如果按照原理的思路一定是先构造出整个二叉书然后在重新开始后续编列:

书上提供的思路:

直接由前和中构造后,分别得到

 

void build(char *p_str,char *m_str,char *f_str,int n)
     24 {
     25         if(n<=0)
     26         return ;
     27         int l_len=strchr(m_str,p_str[0])-m_str;
     28         build(p_str+1,m_str,f_str,l_len);
     29         build(p_str+l_len+1,m_str+l_len+1,f_str+l_len,n-l_len-1);
     30         f_str[n-1]=p_str[0];
     31 }

这里应该注意的对于字符数组的处理问题:首先如果int l_len=strchr(m_str,p_str[0])-m_str得到的是左树的长度,这里p_str[0]一定不在左树中,而相减以后得到的就是两个地址间的元素的个数,对应的是相应的左树的长度。其实如果不对于字符数组操作不清晰的话可以画出来作

 

 3.对于C语言输入字符时,会出现空格被输入

例如

scanf("%c",&a);

scanf("%c",&b);

这里如果在%c前面加上空格就可以解决空格被输入的情况

 

 

 

posted on 2013-04-12 22:34  Practicer..  阅读(117)  评论(0)    收藏  举报

导航