leetcode Binary Tree Maximum Path Sum 迭代算法

来源:互联网 发布:西岐网络 编辑:程序博客网 时间:2024/06/03 08:15

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.


这个是leetcode的一道题,一般给的是深搜的算法,这里用的是迭代实现,算法的主要思想是对于每一个节点,找到这个节点最长的路径,再用迭代额算法遍历整棵树,得到结果,理论上的时间复杂度是0(n2),但是没能AC,上代码,记住:后续遍历栈保存的是根节点到所访问节点的完整的路径

/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:int maxPathSums(TreeNode* root){if (root == NULL){return 0;}stack<TreeNode*> stk;TreeNode* p = root;TreeNode* prev = NULL;int result = 0;int sum = 0;while (p || !stk.empty()){if (p){stk.push(p);sum += p->val;p = p->left;}else{p = stk.top();if (p->right && p->right != prev){p = p->right;sum += p->val;stk.push(p);p = p->left;}else{result = max(result, sum);sum -= p->val;stk.pop();prev = p;p = NULL;}}}return result;}int sum(TreeNode* root){return maxPathSums(root->left) + maxPathSums(root->right) + root->val;}int maxPathSum(TreeNode *root){if (root == NULL){return 0;}stack<TreeNode*> stk;stk.push(root);int result = INT_MIN;while (!stk.empty()){TreeNode* p = stk.top();stk.pop();result = max(result, sum(p));if (p->right){stk.push(p->right);}if (p->left){stk.push(p->left);}}return result;}};

0 0
原创粉丝点击