My Leetcode: Binary Tree Maximum Path Sum (Java)



Preorderly traverse the whole tree. For each  node calculate Max(root, root+leftSide, root+rightSide, leftSide+root+rightSide ), update max[0] (which is used to store max value), then return Max (root+leftSide, root+rightSide, root)
public int maxPathSum(TreeNode root) {
if (root==null){
return 0;
}
int[] max={Integer.MIN_VALUE};
maxPathSum(root, max);
return max[0];
}
private int maxPathSum(TreeNode root, int[] max ){
if (root==null){
return 0;
}
max[0]=Math.max(max[0], root.val);
int leftMax=maxPathSum(root.left, max)+root.val;
max[0]=Math.max(leftMax, max[0]);
int rightMax=maxPathSum(root.right, max)+root.val;
max[0]=Math.max(rightMax, max[0]);
public int maxPathSum(TreeNode root) {
if (root==null){
return 0;
}
int[] max={Integer.MIN_VALUE};
maxPathSum(root, max);
return max[0];
}
private int maxPathSum(TreeNode root, int[] max ){
if (root==null){
return 0;
}
max[0]=Math.max(max[0], root.val);
int leftMax=maxPathSum(root.left, max)+root.val;
max[0]=Math.max(leftMax, max[0]);
int rightMax=maxPathSum(root.right, max)+root.val;
max[0]=Math.max(rightMax, max[0]);
max[0]=Math.max(rightMax+leftMax-root.val, max[0]);
return Math.max(Math.max(leftMax, rightMax), root.val);
}
max[0]=Math.max(rightMax+leftMax-root.val, max[0]);
return Math.max(Math.max(leftMax, rightMax), root.val);
}
Also refer to http://blog.csdn.net/fightforyourdream/article/details/16894069
Read full article from My Leetcode: Binary Tree Maximum Path Sum (Java)

No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts