65,170
社区成员




#include <stdio.h>
#define len(A) (sizeof(A) / sizeof(A[0]))
#define print_r(A) \
{\
int i, size = len(A);\
printf("array: ");\
for (i = 0; i < size; i++) {\
printf("%d ", A[i]);\
}\
puts("");\
}
int maxSub(const int A[], int len);
int main()
{
int A[] = {1, 5, -4, -2, 10, 8, -7, -6, 5, 1};
print_r(A);
printf("max sub is: %d\n", maxSub(A, len(A)));
return 0;
}
int maxSub(const int A[], int len)
{
int maxSoFar = A[0] > 0 ? A[0] : 0;
int maxEndHere = maxSoFar, i;
for (i = 1; i < len; i++) {
maxEndHere += A[i];
if (maxEndHere< 0)
maxEndHere = 0;
if (maxEndHere > maxSoFar)
maxSoFar = maxEndHere;
}
return maxSoFar;
}
#include <stdio.h>
#include <stdlib.h>
struct node_t {
int val;
struct node_t *left;
struct node_t *right;
};
typedef struct node_t tree;
void dispose_tree(tree *t);
tree *insert(tree *t, int v);
void dump(tree *t);
tree *tree2list(tree *t);
int main()
{
tree *t = NULL;
struct node_t *tmp = NULL;
t = insert(t, 10);
insert(t, 5);
insert(t, 11);
insert(t, 2);
insert(t, 6);
insert(t, 18);
insert(t, 15);
insert(t, 20);
dump(t);
puts("");
t = tree2list(t);
/* dispose_tree(t);
*/
while (t) {
tmp = t;
printf("%d ", t->val);
t = t->right;
free(tmp);
}
puts("");
return 0;
}
void dispose_tree(tree *t)
{
if (t) {
dispose_tree(t->left);
dispose_tree(t->right);
free(t);
}
}
tree *insert(tree *t, int v)
{
if (t) {
if (v > t->val)
t->right = insert(t->right, v);
else
t->left = insert(t->left, v);
} else {
t = malloc(sizeof(struct node_t));
t->val = v;
t->left = t->right = NULL;
}
return t;
}
void dump(tree *t)
{
if (t) {
dump(t->left);
printf("%d ", t->val);
dump(t->right);
}
}
tree *tree2list(tree *t)
{
tree *new_tree = t;
struct node_t *cur = t;
struct node_t *new_root = NULL;
struct node_t *tmp = NULL;
struct node_t *tmp_parent = NULL;
while (new_tree && new_tree->left) {
new_tree = new_tree->left;
}
while (cur) {
while (cur->left) {
/* roate right */
new_root = cur->left;
cur->left = new_root->right;
new_root->right = cur;
cur = new_root;
if (tmp_parent)
tmp_parent->right = cur;
}
tmp_parent = cur;
cur = cur->right;
}
tmp = new_tree;
while (tmp) {
tmp_parent = tmp;
tmp = tmp->right;
if (tmp)
tmp->left = tmp_parent;
}
return new_tree;
}
#include <stdio.h>
#include <stdlib.h>
struct node_t {
int val;
struct node_t *left;
struct node_t *right;
};
typedef struct node_t tree;
void dispose_tree(tree *t);
tree *insert(tree *t, int v);
void dump(tree *t);
void find_path_by_num(tree *t, int num, int prefix[], int prefix_len);
void print_r(int arr[], int len);
void arrcp(int dest[], int src[], int len);
int main()
{
tree *t = NULL;
struct node_t *tmp = NULL;
t = insert(t, 10);
insert(t, 5);
insert(t, 4);
insert(t, 7);
insert(t, 12);
find_path_by_num(t, 22, NULL, 0);
dispose_tree(t);
return 0;
}
void dispose_tree(tree *t)
{
if (t) {
dispose_tree(t->left);
dispose_tree(t->right);
free(t);
}
}
tree *insert(tree *t, int v)
{
if (t) {
if (v > t->val)
t->right = insert(t->right, v);
else
t->left = insert(t->left, v);
} else {
t = malloc(sizeof(struct node_t));
t->val = v;
t->left = t->right = NULL;
}
return t;
}
void dump(tree *t)
{
if (t) {
dump(t->left);
printf("%d ", t->val);
dump(t->right);
}
}
void find_path_by_num(tree *t, int num, int prefix[], int prefix_len)
{
int new_prefix[prefix_len+1];
if (!t) {
return ;
} else {
if (num == t->val) {
print_r(prefix, prefix_len);
printf("%d\n", t->val);
} else if (num > t->val) {
arrcp(new_prefix, prefix, prefix_len);
new_prefix[prefix_len] = t->val;
find_path_by_num(t->left, num - t->val, new_prefix, prefix_len+1);
find_path_by_num(t->right, num - t->val, new_prefix, prefix_len+1);
} else {
return ;
}
}
}
void print_r(int arr[], int len)
{
int i;
for (i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
}
void arrcp(int dest[], int src[], int len)
{
int i;
for (i = 0; i< len; i++) {
dest[i] = src[i];
}
}