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