二叉樹和最大的子樹

2021-06-19 23:23:24 字數 1201 閱讀 3679

問題描述:

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

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

**:[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;  

}  

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

問題描述 給乙個二叉樹,每個節點都是正或負整數,如何找到乙個子樹,它所有節點的和最大?思路 採用自底向上的計算。先計算左右子樹總和值,用左右子樹的總和加上當前節點值,如果當前總和大於最大值,則更新最大值,同時將最大子樹根節點更新為當前根。簡單說,就是後序遍歷。cpp view plain copy ...

二叉樹問題 找到二叉樹中的最大搜尋二叉子樹

題目 給定一棵二叉樹的頭節點head,已知其中所有節點的值都不一樣,找到含有節點最多的搜尋二叉樹,並返回這棵子樹的頭節點。注意子樹的概念 基本思路 以節點node為頭的樹中,最大的搜尋二叉樹只可能來自以下的兩種情況 node的左子樹和右子樹都是搜尋二叉樹,並且左子樹的最大值小於node,右子樹的最小...

二叉樹子樹的刪除

package 二叉樹子樹的刪除 public class binarytree public treenode getroot 前序 public void frontshow else 中序 public void midshow else 後序 public void aftershow el...