Guest User

Untitled

a guest
Oct 19th, 2014
282
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.29 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define max(a,b) a>b ? a:b
  5.  
  6. typedef struct treenode {
  7.     int val;
  8.     struct treenode *right;
  9.     struct treenode *left;
  10. }TreeNode;
  11.  
  12. typedef struct listnode {
  13.     int val;
  14.     struct listnode *next;
  15. }ListNode;
  16.  
  17.  
  18. ListNode * heaviest(TreeNode *root, ListNode **heavy) {
  19.     if (root==NULL)
  20.         return NULL;
  21.     else (*heavy)->val=root->val;
  22.     if (root->left==NULL && root->right==NULL) {
  23.         (*heavy)->next=NULL;
  24.         return *heavy;
  25.     }
  26.     else (*heavy)->next=(ListNode *)malloc(sizeof(ListNode));
  27.     if (root->left==NULL){
  28.         (*heavy)->next=heaviest(root->right, &((*heavy)->next));
  29.         return *heavy;
  30.     }
  31.     else if (root->right==NULL){
  32.         (*heavy)->next=heaviest(root->left, &((*heavy)->next));
  33.         return *heavy;
  34.     }
  35.     else {
  36.         if (maxSum(root->left) > maxSum(root->right))
  37.             (*heavy)->next=(heaviest(root->left,&((*heavy)->next)));
  38.         else (*heavy)->next=(heaviest(root->right,&((*heavy)->next)));
  39.         return *heavy;
  40.     }
  41.        
  42. }
  43.  
  44. int maxSum(TreeNode *root) {
  45.     if (root==NULL)
  46.         return 0;
  47.     else if (root->left==NULL && root->right==NULL)
  48.         return root->val;
  49.     else if (root->left==NULL)
  50.         return root->val + maxSum(root->right);
  51.     else if (root->right==NULL)
  52.         return root->val + maxSum(root->left);
  53.     else return  root->val + max(maxSum(root->left), maxSum(root->right));
  54. }
Advertisement
Add Comment
Please, Sign In to add comment