問題描述:
給乙個二叉樹,每個節點都是正或負整數,如何找到乙個子樹,它所有節點的和最大?
思路:採用自底向上的計算。先計算左右子樹總和值,用左右子樹的總和加上當前節點值,如果當前總和大於最大值,則更新最大值,同時將最大子樹根節點更新為當前根。簡單說,就是後序遍歷。
**:[cpp]view plain
copy
#include
#include
using
namespace
std;
struct
node
; // 由於要更新最大值和最大子樹根,因此採用了引用引數
// 也可以考慮使用全域性變數來處理
long
max_sub_tree(node *root ,
long
&max_sum , node *& sub_root)
// 採用後續遍歷
long
left_sum = max_sub_tree(root->left , max_sum , sub_root);
//左子樹的總和(計算總和過程中可能已經更新了當前的最大值和子樹)
long
right_sum = max_sub_tree(root->right , max_sum , sub_root);
//再計算右子樹
long
sum = root->data + left_sum + right_sum;
if(sum >= max_sum)
return
sum;
}int
main()
; node q = ;
node lr = ;
node rr = ;
node r = ;
node *re = null;
long
max_sum = numeric_limits<
long
>::min();
long
sum = max_sub_tree(&r , max_sum , re);
if(null == re)
else
return
0;
}
二叉樹最大路徑和 python 二叉樹最大路徑和
1.題目描述 輸入乙個二叉樹層次遍歷的結果,輸出這個二叉樹最大路徑和。路徑不一定從根節點開始和葉子節點結束。只要是連續的路徑就可以。如輸入 10,9,20,null,null,15,7 109 20 15 7 輸出 42 2.首先將乙個陣列還原成乙個二叉樹。然後根絕二叉樹的根節點返回最大路徑和。cl...
二叉樹的深度 二叉樹的深度 二叉樹最大寬度
題目 輸入一棵二叉樹的根節點,求該樹的深度。從根節點到葉節點依次經過的節點 含根 葉節點 形成樹的一條路徑,最長路徑的長度為樹的深度。例如 給定二叉樹 3,9,20,null,null,15,7 返回它的最大深度 3 根節點加上左右子樹的最大深度就是樹的最大深度。如下 class solution ...
小公尺筆試 二叉樹
有一棵合法的二叉樹,共有n個節點 1 n 1000 節點編號為 0 n 1 給定節點間的父子關係,求樹的高度。輸入 第一行乙個整數n,接下來有n 1行。每行兩個整數,以空格分隔,第乙個表示父節點編號,第二個表示子節點編號。輸出 樹的高度 樣例輸入 5 0 10 2 1 31 4樣例輸出 3 這個題的...