路徑被定義為一條從樹中任意節點出發,達到任意節點的序列。該路徑至少包含一個節點,且不一定經過根節點。
使用前序來創建樹
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即可實現