二叉樹中的最大路徑和-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