2014秋季阿里笔试

1.写一个函数,输入一个二叉树,树中每个节点存放了一个整数值,函数返回这棵二叉树中相差最大的两个节点间的差值绝对值

// Bitree.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>

using namespace std;
typedef int type;

//定义数结点
typedef struct bNode
{
	type data;
	struct bNode *lchild;
	struct bNode *rchild;
}bNode,*bTree;

typedef struct RESULT
{
    type Max;  //最大数据
	type Min;  //最小数据
}RESULT;
RESULT res;

//先序创建二叉树  
void CreateBitree(bTree &T)
{
	type ch;
	cin>>ch;
	if(-1==ch)
	{
	 T=NULL;
	}
	else
	{
	   T=(bTree)malloc(sizeof(bNode));
	   if(NULL==T)
	   {
	     cout<<"申请内存失败!"<<endl;
		 return ;
	   }
	   T->data=ch;
	   CreateBitree(T->lchild);
	   CreateBitree(T->rchild);
	}

}

void MaxData(bTree T)
{
	if(NULL==T)
	{
		return;
	}
	else
	{
		if(T->data>res.Max)
			res.Max=T->data;
		MaxData(T->lchild);
		MaxData(T->rchild);
	}
}

void MinData(bTree T)
{
	if(NULL==T)
	{
		return;
	}
	else
	{
		if(T->data<res.Min)
			res.Min=T->data;
		MinData(T->lchild);
		MinData(T->rchild);
	}
}


int _tmain(int argc, _TCHAR* argv[])
{
	bTree T;
	int sum=0;
	CreateBitree(T);
	
	res.Max=T->data;
	res.Min=T->data;
    
	MaxData(T);
	MinData(T);
	
	cout<<res.Max-res.Min<<endl;
	system("pause");
	return 0;
}



 

 

 

2.定义2个字符串query和text, 如果query里最大连续字符子串在text中存在,则返回子串长度. 例如: query="acbac",text="acaccbabb", 则最大连续子串为"cba", 则返回长度3.

此题用java或c++中的string较为简单.

#include<iostream>
#include<string>

using namespace std;
int QueryString(string query,string text);
int main()
{  
	
	string query="acbac";
	string text="acaccbabb";


	cout<<QueryString(query,text)<<endl; 
	
	system("pause");
	return 0;
}


int QueryString(string query,string text)
{

	int n=query.length();
	for(int i=n;i>0;i--)
	{
		int m=n+1-i; //i个字母连续的子串个数
		int cur=0;
		for(int j=0;j<m;j++) //将字串放入temp数组中   从连续出现n个字母的子串开始
		{
			cur=j+cur;
			string dt=query.substr(cur,i);
			if(text.find(dt)!=text.npos) //如果在text存在
			{
				return dt.length();
			}
			
		}
	}

	return  -1;

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值