diff --git a/æ ‘.cpp b/æ ‘.cpp index d6476d0..49d2548 100644 --- a/æ ‘.cpp +++ b/æ ‘.cpp @@ -1,98 +1,99 @@ -#include -#include -#include -using namespace std; -typedef int ElemType; -typedef struct node -{ - ElemType data; //Êý¾ÝÔªËØ - struct node* lchild; //Ö¸Ïò×óº¢×Ó½áµã - struct node* rchild; //Ö¸ÏòÓÒº¢×Ó½áµã -} BTNode; //¶þ²æÁ´½áµãÀàÐÍ - -BTNode* CreateBTree(ElemType a[], ElemType b[], int n) -//¶ÔÓ¦Àý2.8µÄËã·¨ÓÉÏÈÐòÐòÁÐa[0..n-1]ºÍÖÐÐòÐòÁÐb[0..n-1]½¨Á¢¶þ²æÁ´ -{ - int k; - if (n <= 0) return NULL; - ElemType root = a[0]; //¸ù½áµãÖµ - BTNode* bt = (BTNode*)malloc(sizeof(BTNode)); - bt->data = root; - for (k = 0; k < n; k++) //ÔÚbÖвéÕÒb[k]=rootµÄ¸ù½áµã - if (b[k] == root) - break; - bt->lchild = CreateBTree(a + 1, b, k); //µÝ¹é´´½¨×ó×ÓÊ÷ - bt->rchild = CreateBTree(a + k + 1, b + k + 1, n - k - 1); //µÝ¹é´´½¨ÓÒ×ÓÊ÷ - return bt; -} - -void DispBTree(BTNode* bt) -//²ÉÓÃÀ¨ºÅ±íʾÊä³ö¶þ²æÁ´bt -{ - if (bt != NULL) - { - printf("%d", bt->data); - if (bt->lchild != NULL || bt->rchild != NULL) - { - printf("("); //Óк¢×Ó½áµãʱ²ÅÊä³ö( - DispBTree(bt->lchild); //µÝ¹é´¦Àí×ó×ÓÊ÷ - if (bt->rchild != NULL) printf(","); //ÓÐÓÒº¢×Ó½áµãʱ²ÅÊä³ö, - DispBTree(bt->rchild); //µÝ¹é´¦ÀíÓÒ×ÓÊ÷ - printf(")"); //Óк¢×Ó½áµãʱ²ÅÊä³ö) - } - } -} - -void DestroyBTree(BTNode*& bt) -//ÊÍ·ÅÒÔbtΪ¸ù½áµãµÄ¶þ²æÊ÷ -{ - if (bt != NULL) - { - DestroyBTree(bt->lchild); - DestroyBTree(bt->rchild); - free(bt); - } -} -int maxsum = 0; //È«¾Ö±äÁ¿:´æ·Å×î´ó·¾¶ºÍ¡£ -vector maxpath; //È«¾Ö±äÁ¿:´æ·Å×î´ó·¾¶ -void Findmaxpath(BTNode* bt, vector apath, int asum) -//Çó¸ù½áµãµ½Ò¶½áµãµÄ·¾¶ºÍ×î´óµÄ·¾¶ -{ - if (bt == NULL) //¿ÕÊ÷Ö±½Ó·µ»Ø - return; - apath.push_back(bt->data); asum += bt->data; //bt½áµã¼ÓÈëapath - asum += bt->data; //ÀÛ¼Æa·¾¶ºÍ¡£ - if (bt->lchild == NULL && bt->rchild == NULL) //bt½áµãΪҶ½áµã - { - if (asum - maxsum) - { - maxsum = asum; - maxpath.clear(); - maxpath = apath; - } - } - Findmaxpath(bt->lchild, apath, asum); //ÔÚ×ó×ÓÊ÷ÖвéÕÒ - Findmaxpath(bt->rchild, apath, asum); //ÔÚÓÒ×ÓÊ÷ÖвéÕÒ -} -int main() -{ - BTNode* bt; - ElemType a[] = { 5,2,3,4,1,6 }; - ElemType b[] = { 2,3,5,1,4,6 }; - int n = sizeof(a)/sizeof(a[0]); - bt = CreateBTree(a,b,n); - printf("ʵÑé½á¹û:\n"); - printf("¶þ²æÊ÷bt:"); - DispBTree(bt); - printf("'in"); - printf("×î´ó·¾¶"); - vector apath; - int asum = 0; - Findmaxpath(bt,apath,asum); - printf("·¾¶ºÍ: % d£¬Â·¾¶ : ",maxsum); - for (int i=0;i < maxpath.size();i++) - printf("%d ",maxpath[i]); - printf("\n"); - printf("Ïú»ÙÊ÷bt\n"); - DestroyBTree(bt); -} + +#include +#include +#include +using namespace std; +typedef int ElemType; +typedef struct node +{ + ElemType data; //Êý¾ÝÔªËØ + struct node* lchild; //Ö¸Ïò×óº¢×Ó½áµã + struct node* rchild; //Ö¸ÏòÓÒº¢×Ó½áµã +} BTNode; //¶þ²æÁ´½áµãÀàÐÍ + +BTNode* CreateBTree(ElemType a[], ElemType b[], int n) +//¶ÔÓ¦Àý2.8µÄËã·¨ÓÉÏÈÐòÐòÁÐa[0..n-1]ºÍÖÐÐòÐòÁÐb[0..n-1]½¨Á¢¶þ²æÁ´ +{ + int k; + if (n <= 0) return NULL; + ElemType root = a[0]; //¸ù½áµãÖµ + BTNode* bt = (BTNode*)malloc(sizeof(BTNode)); + bt->data = root; + for (k = 0; k < n; k++) //ÔÚbÖвéÕÒb[k]=rootµÄ¸ù½áµã + if (b[k] == root) + break; + bt->lchild = CreateBTree(a + 1, b, k); //µÝ¹é´´½¨×ó×ÓÊ÷ + bt->rchild = CreateBTree(a + k + 1, b + k + 1, n - k - 1); //µÝ¹é´´½¨ÓÒ×ÓÊ÷ + return bt; +} + +void DispBTree(BTNode* bt) +//²ÉÓÃÀ¨ºÅ±íʾÊä³ö¶þ²æÁ´bt +{ + if (bt != NULL) + { + printf("%d", bt->data); + if (bt->lchild != NULL || bt->rchild != NULL) + { + printf("("); //Óк¢×Ó½áµãʱ²ÅÊä³ö( + DispBTree(bt->lchild); //µÝ¹é´¦Àí×ó×ÓÊ÷ + if (bt->rchild != NULL) printf(","); //ÓÐÓÒº¢×Ó½áµãʱ²ÅÊä³ö, + DispBTree(bt->rchild); //µÝ¹é´¦ÀíÓÒ×ÓÊ÷ + printf(")"); //Óк¢×Ó½áµãʱ²ÅÊä³ö) + } + } +} + +void DestroyBTree(BTNode*& bt) +//ÊÍ·ÅÒÔbtΪ¸ù½áµãµÄ¶þ²æÊ÷ +{ + if (bt != NULL) + { + DestroyBTree(bt->lchild); + DestroyBTree(bt->rchild); + free(bt); + } +} +int maxsum = 0; //È«¾Ö±äÁ¿:´æ·Å×î´ó·¾¶ºÍ¡£ +vector maxpath; //È«¾Ö±äÁ¿:´æ·Å×î´ó·¾¶ +void Findmaxpath(BTNode* bt, vector apath, int asum) +//Çó¸ù½áµãµ½Ò¶½áµãµÄ·¾¶ºÍ×î´óµÄ·¾¶ +{ + if (bt == NULL) //¿ÕÊ÷Ö±½Ó·µ»Ø + return; + apath.push_back(bt->data); asum += bt->data; //bt½áµã¼ÓÈëapath + asum += bt->data; //ÀÛ¼Æa·¾¶ºÍ¡£ + if (bt->lchild == NULL && bt->rchild == NULL) //bt½áµãΪҶ½áµã + { + if (asum - maxsum) + { + maxsum = asum; + maxpath.clear(); + maxpath = apath; + } + } + Findmaxpath(bt->lchild, apath, asum); //ÔÚ×ó×ÓÊ÷ÖвéÕÒ + Findmaxpath(bt->rchild, apath, asum); //ÔÚÓÒ×ÓÊ÷ÖвéÕÒ +} +int main() +{ + BTNode* bt; + ElemType a[] = { 5,2,3,4,1,6 }; + ElemType b[] = { 2,3,5,1,4,6 }; + int n = sizeof(a)/sizeof(a[0]); + bt = CreateBTree(a,b,n); + printf("ʵÑé½á¹û:\n"); + printf("¶þ²æÊ÷bt:"); + DispBTree(bt); + printf("'in"); + printf("×î´ó·¾¶"); + vector apath; + int asum = 0; + Findmaxpath(bt,apath,asum); + printf("·¾¶ºÍ: % d£¬Â·¾¶ : ",maxsum); + for (int i=0;i < maxpath.size();i++) + printf("%d ",maxpath[i]); + printf("\n"); + printf("Ïú»ÙÊ÷bt\n"); + DestroyBTree(bt); +} \ No newline at end of file