首页 » 编程之美 » 正文

[leetcode_124]Binary Tree Maximum Path Sum

求出二叉树中的距离和。
Given a binary tree, find the maximum path sum.

The path may start and end at any node in the tree.

For example:
Given the below binary tree,

   1
  / \
 2   3

Return 6.

递归寻找所有情况,针对每个点是:max(只取该点,左子树贡献的最大值+该点,左子树贡献的最大值+该点+右子树贡献的最大值,该点+右子树的最大值)。

class Solution {
public:
    int result;
    int maxPathSum(TreeNode *root) {
        result = 0x80000001;
        if(root != NULL) {
            queryNodes(root);<br />
        }
        return result;
    }
private:
    void queryNodes(TreeNode * node) {
        if(node -&gt;left == NULL &amp;&amp; node-&gt;right == NULL) {
            //node-&gt;val = node-&gt;val&gt;=0?node-&gt;val:0;
            if(node -&gt; val &gt; result)result = node-&gt;val;
            return;
        }
        if(node-&gt;left == NULL) {
            queryNodes(node-&gt;right);
            node-&gt;val = node-&gt;val + node-&gt;right-&gt;val &gt;= node-&gt;val?node-&gt;val + node-&gt;right-&gt;val:node-&gt;val;
            if(node -&gt; val &gt; result)result = node-&gt;val;
            return;
        }
        if(node-&gt;right == NULL) {
            queryNodes(node-&gt;left);
            node-&gt;val =  node-&gt;val + node-&gt;left-&gt;val &gt;= node-&gt;val?node-&gt;val + node-&gt;left-&gt;val:node-&gt;val;
            if(node -&gt; val &gt; result)result = node-&gt;val;
            return;
        }
        queryNodes(node-&gt;right);
        queryNodes(node-&gt;left);
        if(node -&gt; val &gt; result)
            result = node-&gt;val;
        if(node -&gt; val + node-&gt;left-&gt;val &gt; result)
            result = node -&gt; val + node-&gt;left-&gt;val;
        if(node -&gt; val + node-&gt;right-&gt;val &gt; result)
            result = node -&gt; val + node-&gt;right-&gt;val;
        if(node -&gt; val + node-&gt;right-&gt;val + node-&gt;left-&gt;val &gt; result)
            result = node -&gt; val + node-&gt;right-&gt;val + node-&gt;left-&gt;val;<br />
        int max = node-&gt;val + node-&gt;left-&gt;val &gt;= node-&gt;val + node-&gt;right-&gt;val?node-&gt;val + node-&gt;left-&gt;val:node-&gt;val + node-&gt;right-&gt;val;
        node-&gt;val =  max &gt;= node-&gt;val?max:node-&gt;val;<br />
    }
};

发表评论