1. 程式人生 > >二叉樹中的最大路徑和-LintCode

二叉樹中的最大路徑和-LintCode

描述:

給出一棵二叉樹,尋找一條路徑使其路徑和最大,路徑可以在任一節點中開始和結束(路徑和為兩個節點之間所在路徑上的節點權值之和)

樣例:

給出一棵二叉樹:

  1
      / \
     2   3

返回 6

思路:

首先要考慮到二叉樹中的節點存在正數也存在負數,且最大路徑和所在路徑是任意兩個節點的通路或者是一個節點自己。

所以不能直接使用之前根節點到葉子節點的最大路徑和的求解方法。

1.如果這個節點是空,則返回值為0;

2.遍歷節點的左子樹和右子樹,將左子樹的最大不分叉路徑(大於0)+右子樹的最大不分叉路徑(大於0)+節點本身的值

與當前最大路徑和Max作比較,將較大的數保存於Max;

3.返回左右節點的中較大不分叉路徑和(大於零)+節點值,作為遞迴呼叫。

AC程式碼:

/**
 * Definition of TreeNode:
 * class TreeNode {
 * public:
 *     int val;
 *     TreeNode *left, *right;
 *     TreeNode(int val) {
 *         this->val = val;
 *         this->left = this->right = NULL;
 *     }
 * }
 */
 
class Solution {
public:
    /*
     * @param root: The root of binary tree.
     * @return: An integer
     */
     
    int maxpath(TreeNode* root,int &Max)
    {
        if(root==NULL)
            return 0;
        int l=maxpath(root->left,Max);
        int r=maxpath(root->right,Max);
        Max=max(Max,max(0,l)+max(0,r)+root->val);
        return max(0,max(l,r))+root->val;
    }

    int maxPathSum(TreeNode * root) {
        // write your code here
        if(root==NULL)
            return 0;
        int Max=INT_MIN;
        maxpath(root,Max);
        return Max;
        
    }
};


相關推薦

[LeetCode] 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

每天一道LeetCode-----計算路徑路徑只需要從一個節點到達另一個節點,無其他要求

Binary Tree Maximum Path Sum 給定一個二叉樹,計算二叉樹中最長的路徑和,路徑只需要從一個節點到另一個節點,不需要經過根節點,也不需要從葉子節點開始,但至少包含一個節點 乍一看,二叉樹上任意一條路徑都有可能是最後的結果,而解

路徑【124. Binary Tree Maximum Path Sum】

/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *le

LeetCode(124) Binary Tree Maximum Path Sum 路徑 (如何遞迴?)

對任意一個節點,當前節點值cur, 左子樹,一條路徑值 > 0 , cur += left 右子樹,一條路徑值 > 0 , cur += right 這樣可以可以遍歷求得最大的路徑和。 ac程式碼 /** * Definition f

Binary Tree Maximum Path Sum 求路徑

題目描述 Given a binary tree, find the maximum path sum. The path may start and end at any node in

路徑

//二叉樹節點的定義 class TreeNode { int val; TreeNode left; TreeNode right; TreeNod

[leetcode]深度小深度

一、二叉樹的最大深度 題目描述: Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the longest path from the root node d

LeetCode:543. Diameter of Binary Tree(找出的半徑)

Given a binary tree, you need to compute the length of the diameter of the tree. The diameter of a binary tree is the length of the longest 

DS+圖綜合練習--路徑

ostream tree ring 一行 {} 等於 content man mil 題目描述 給定一顆二叉樹的邏輯結構(先序遍歷的結果,空樹用字符‘0’表示,例如AB0C00D00),建立該二叉樹的二叉鏈式存儲結構 二叉樹的每個結點都有一個權值,從根結點到每個葉子結點將

路徑(Binary Tree Maximum Path Sum)

題目: Given a binary tree, find the maximum path sum. For this problem, a path is defined as any sequence of nodes from some starti

深度小深度實現

二叉樹的最大深度 給定一個二叉樹,找出其最大深度。 二叉樹的深度為根節點到最遠葉子節點的距離。 如果二叉樹為空,則深度為0 如果不為空,分別求左子樹的深度和右子樹的深度,取最大的再加1. 二叉樹的最小深度 給定一個二叉樹,找出其最小深度。

暴力法求路徑長度

原理很簡單,二叉樹內最大的路徑的起點和終點一定是葉子。據此可以遍歷所有的葉子進行暴力求解(好好的分治法能解決的問題被我弄成這樣) 二叉樹的節點定義如下: package cn.edu.nju.zyf.longestPathWithinABinaryTree; publ

找出的子,且子搜尋

題目 找出二叉樹中最大的子樹,該子樹為二叉搜尋樹。所謂最大的子樹就是指結點數目最多的子樹。 分析 該題目是要找出二叉樹中最大的子樹,該子樹必須是二叉搜尋樹(BST)。子樹的概念需要重點關注一下,以下面一棵二叉樹為例          ____10____

深度小深度以及之間的差

maxheight函式就是求二叉樹的左子樹與右子樹中那個深度最大最大深度多少,minheight函式就是求二叉樹的左子樹與右子樹中那個深度最小最小深度多少,Isbalance函式就是求左子樹與右子樹的深度差,只要不大於1就是平衡二叉樹。 平衡二叉樹:它是一 棵空樹或它的左右

js 刪除小值

ret 判斷 lse size pla ren 二叉樹 splay 利用 //刪除最小值function delMinNode (root){ if(!root) { return false; } var current = root;

深度(LintCode

題目來源:LintCode 原題地址:http://www.lintcode.com/zh-cn/problem/maximum-depth-of-binary-tree/ 題目: 給定一個二叉樹,

路徑-LintCode

描述: 給出一棵二叉樹,尋找一條路徑使其路徑和最大,路徑可以在任一節點中開始和結束(路徑和為兩個節點之間所在路徑上的節點權值之和) 樣例: 給出一棵二叉樹: 1 / \

路徑,高度,寬度

package com.weshare.eel.task.utils; import com.jayway.jsonpath.internal.function.numeric.Max; import java.util.ArrayDeque; import java.util.Que

刷題:輸入一顆一個整數,打印出結點值的為輸入整數的所有路徑

原題:輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。 思路分析:首先思考節點值的和為輸入的整數,每條路徑都一定是從根節點到葉子節點,在資料結構中從根節點到葉子節點的遍歷稱之為深度優先遍歷DFS。因此整

輸入一顆一個整數,打印出結點值的為輸入整數的所有路徑(劍指offer)

      解題思路:遍歷二叉樹,採用遞迴的方法,將滿足條件的路徑壓入一維陣列當中,注意當找到滿足條件的路徑時,先將陣列壓入二維陣列,然後將一維陣列中的每個元數彈出,以存放新的路徑。 /* struct TreeNode {int val;struct TreeNode