diff --git a/æ ‘.cpp b/æ ‘.cpp new file mode 100644 index 0000000..d6476d0 --- /dev/null +++ b/æ ‘.cpp @@ -0,0 +1,98 @@ +#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); +}