二叉樹的最大路徑和


路徑被定義為一條從樹中任意節點出發,達到任意節點的序列。該路徑至少包含一個節點,且不一定經過根節點。

使用前序來創建樹

tnode* createtree(){
    char data;
    tnode *T=nullptr;
    cin >> data;
    if ('#'==data) {
        T=nullptr;
    }
    else{
        T=new tnode; 
        T->data=data;
        T->lt=createtree();
        T->rt=createtree();
    }
    return T;
}//類似這種來創建二叉樹

 

 

 

以上為解題思路。

然后就是算法的實現

int maxgain(tnode* root,int&val){
    if (root==nullptr) {
        return 0;
    }
    int left=maxgain(root->lt, val);
    int right=maxgain(root->rt, val);
    int ret=root->data+max(0,left)+max(0,right);//這為后兩種情況下的權值,同時需要考慮權值的為負數的情況,  val的初始值應設置為INT_MIN
    int lmr=root->data+max(0,max(left, right));//這為第一種情況
    val=max(val, ret, lmr);
    return ret;//遞歸
}

 

 然后主函數調用maxgain即可實現


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM