如图,在b数中查找元素e,我注释掉的代码为啥不可以?

如图,在b数中查找元素e,我注释掉的代码为啥不可以?

img


完整代码:

BTNode* FindNode(BTNode* b, char e)
{
    /*BTNode* p = NULL;
    if (b == NULL)
        return NULL;
    if (b->data == e)
    {
        return b;
    }
    p = FindNode(b->lchild, e);
    p = FindNode(b->rchild, e);
    if(p != NULL)
        return p;
    else
        return NULL;*/

    BTNode* p = NULL;
    if (b == NULL)
    {
        return NULL;
    }
    else if (b->data == e)
    {
        p = FindNode(b->lchild, e);
        if (p != NULL)
        {
            return b;
        }
        else
        {
            return FindNode(b->rchild, e);
        }
    }
}

你不判断左节点到底找到没有,就直接把p赋值成了右节点,那往左边找的代码不是白写了吗
每执行FindNode之后都要判断p呀

  • 这篇博客: 笔试做过的题:二 : 写一个文本处理程序,识别文本中包含有a开头b结尾的字符串中的 代码: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 这个题比较简单,使用fopen和fgets就能解决,,题目没有要求输出总行数,不然最后还要判断空行

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h> 
    
    int main(){
    	char s[100];
    	FILE *p;
    	int lines=0;
    	p=fopen("D:\\11.txt","r");
    	
    	if(p){
    		while((fgets(s,100,p))!=NULL){
    			++lines;
    		
    			char c1='a';
    			char c2='b';
    			int m = strlen(s);
    		//	printf("s长度:%d\n",m);
    			int i,j;
    			for(i=0;i<m;i++){
    				if(s[i]==c1){
    					for(j=i;j<m;j++){
    						if(s[j]==c2){
    							printf("行数:%d,a的位置:%d,b的位置:%d\n",lines,i+1,j+1);	
    							continue; 
                                //break;
    						}
    					}
    				//	break;
    				}	
    			} 	
    		}
    			
    		fclose(p);
    	}
    	return 0;	
    }