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;
}