2016搜狐筆試二叉樹和最大的子樹

2022-04-15 11:27:13 字數 1334 閱讀 2324

問題描述:

給乙個二叉樹,每個節點都是正或負整數,如何找到乙個子樹,它所有節點的和最大?

思路:採用自底向上的計算。先計算左右子樹總和值,用左右子樹的總和加上當前節點值,如果當前總和大於最大值,則更新最大值,同時將最大子樹根節點更新為當前根。簡單說,就是後序遍歷。

**:[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 這個題的...