int diff(Node *root) {
if (root == NULL)
return 0;
int max = root->data, min = root->data;
queue<Node*> q;
q.push(root);
while (! q.empty()) {
Node *temp = q.front();
q.pop();
max = temp->data > max ? temp->data : max;
min = temp->data < min ? temp->data : min;
if (temp->left)
q.push(temp->left);
if (temp->right)
q.push(temp->right);
}
return max - min;
}
#include<iostream>
#include<string>
using namespace std;
int main(void)
{
string query;
string text;
cout << "请输入query字符串:";
cin >> query;
cout << "请输入text字符串:";
cin >> text;
int m = query.size();
int n = text.size();
int arr[100][100] = {0};
for (int i = 0; i < n;i++)
{
if (text[i]==query[0])
{
arr[0][i] = 1;
}
}
for (int j = 0; j < m;j++)
{
if (text[0]==query[j])
{
arr[j][0] = 1;
}
}
for (int i = 1; i < m;i++)
{
for (int j = 1; j < n;j++)
{
if (text[j]==query[i])
{
arr[i][j] = arr[i - 1][j - 1] + 1;
}
}
}
int max = 0;
int hangbiao = 0;
for (int i = 0; i < m;i++)
{
for (int j = 0; j < n;j++)
{
if (arr[i][j]>max)
{
max = arr[i][j];
hangbiao = i-max+1;
}
}
}
cout << "最大子串长度:" << max << endl << "子串如下:" << endl;
for (int i = 0; i < max;i++)
{
cout << query[hangbiao + i];
}
cout << endl;
system("pause");
return 0;
}
int maxValue(Node* root){
if(root == NULL) return 0;
int left = maxValue(root->left());
int right = maxValue(root->right());
int max = left>right?left:right;
return root->value()>max?root->value():max;
}
int minValue(Node* root){
if(root == NULL) return 32767;
int left = minValue(root->left());
int right = minValue(root->right());
int min = left<right?left:right;
return root->value()<max?root->value():max;
}
int diff(Node* root){
return maxValue(root)-minValue(root);
}
struct node
{
int value;
node *left;
node *right;
};
int find(node *P)
{
static int min = MIN_INF;
static int max = MAX_INF;
if(p->value < min)
min = p->value;
if(p->value > max)
max = p->value;
if(p->left != NULL)
find(p->left);
if(p->right != NULL)
find(p->right);
return max-min;
}
int GetMaxGap(Node *rt) {
if (*rt == null) {
return 0;
}
int *pmax, *pmin;
*max = *min = rt -> val;
updateVal(rt, pmax, pmin);
return *pmax - *pmin;
}
void UpdateVal(Node *rt, int *pmax, int *pmin) {
if (*rt == null) {
return;
}
if (*pmax < *rt) {
*pmax = *rt -> val;
}
if (*pmin > *rt) {
*pmin = *rt -> val;
}
updateVal(*rt -> left, pmax, pmin);
updateVal(*rt -> right, pmax, pmin);
}
//递归式求最大最小值,时间复杂度O(n) void findminmax(treenode* tree, int& maxval, int& minval) { if (maxval < tree->val) { maxval = tree->val; } if (minval > tree->val) { minval = tree->val; } if (tree->left != NULL) findminmax(tree->left, maxval, minval); if (tree->right != NULL) findminmax(tree->right, maxval, minval); }