classSolution { Public: intMaxpathsum (TreeNode *root) { if(Root = NULL)return 0; intMax_sum =int_min; Unordered_map<treenode *,int>Node_order; Unordered_map<treenode *, TreeNode *>parent; Map<pair<treenode *, TreeNode *>int>distance; Stack<treenode *>S; S.push (root); Parent[root]=NULL; intSeq =0; while(!S.empty ()) {TreeNode* p =S.top (); S.pop (); Seq++; NODE_ORDER[P]=seq; for(Auto i = Node_order.begin (); I! = Node_order.end (); i++){ if(I->first = =p) Distance.insert (Make_pair (Make_pair (p,p), p-val)); Else{TreeNode* PRA =Parent[p]; if(PRA! =NULL) { inttmp; if(Node_order[pra] <= node_order[i->First ]) {tmp= Distance[make_pair (Pra,i->first)] + p->Val; }Else{tmp= Distance[make_pair (I->FIRST,PRA)] + p->Val; } distance.insert (Make_pair (Make_pair (i-( first,p), TMP)); if(tmp > Max_sum) max_sum =tmp; } } } if(p->Right ) {S.push (P-Right ); Parent[p->right] =p; } if(p->Left ) {S.push (P-Left ); Parent[p->left] =p; } } returnmax_sum; }}
Binary Tree Maximum Path Sum