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