DS樹 二叉樹之最大路徑(模板)

2021-10-10 06:51:34 字數 2127 閱讀 4393

題目描述給定一顆二叉樹的邏輯結構(先序遍歷的結果,空樹用字元『0』表示,例如ab0c00d00),建立該二叉樹的二叉鏈式儲存結構

二叉樹的每個結點都有乙個權值,從根結點到每個葉子結點將形成一條路徑,每條路徑的權值等於路徑上所有結點的權值和。程式設計求出二叉樹的最大路徑權值。如下圖所示,共有4個葉子即有4條路徑,

路徑1權值=5 + 4 + 11 + 7 = 27 路徑2權值=5 + 4 + 11 + 2 = 22

路徑3權值=5 + 8 + 13 = 26 路徑4權值=5 + 8 + 4 + 1 = 18

可計算出最大路徑權值是27。

該樹輸入的先序遍歷結果為abcd00e000fg00h0i00,各結點權值為:

輸入

第一行輸入乙個整數t,表示有t個測試資料

第二行輸入一棵二叉樹的先序遍歷,每個結點用字母表示

第三行先輸入n表示二叉樹的結點數量,然後輸入每個結點的權值,權值順序與前面結點輸入順序對應

以此類推輸入下一棵二叉樹

輸出

每行輸出每棵二叉樹的最大路徑權值,如果最大路徑權值有重複,只輸出1個

樣例輸入

2ab0c00d00

4 5 3 2 6

abcd00e000fg00h0i00

9 5 4 11 7 2 8 13 4 1

樣例輸出

1127

第一種方法,按照題目意思輸入n個結點,把n個節點放在乙個陣列,再把陣列內的值賦給結點,需要定義全域性變數

#include

#include

using

namespace std;

int n[

100]

,m,j;

//定義了全域性變數

class

node

node()

~node()

if(rchild !=

null)}

};class

binarytree

if(c !=

'0')

}binarytree()

~binarytree()

void

build()

};intheight

(node* node)

void

in_put

(node *

&node)

void

pre_order_node

(node *node)

intmain()

in_put

(binarytree.root)

; cout<<

height

(binarytree.root)

<

}return0;

}

第二種方法,因為在建立樹的時候,已經確定了結點數,完全不需要輸入結點數n, 不需要定義全域性變數,只需要利用樹的遞迴即可完成

#include

#include

using

namespace std;

class

node

node()

~node()

if(rchild !=

null)}

};class

binarytree

if(c !=

'0')

}binarytree()

~binarytree()

void

build()

};introad

(node* node)

void

in_put

(node *

&node)

intmain()

return0;

}

DS樹 二叉樹之最大路徑

題目描述 給定一顆二叉樹的邏輯結構 先序遍歷的結果,空樹用字元 0 表示,例如ab0c00d00 建立該二叉樹的二叉鏈式儲存結構 二叉樹的每個結點都有乙個權值,從根結點到每個葉子結點將形成一條路徑,每條路徑的權值等於路徑上所有結點的權值和。程式設計求出二叉樹的最大路徑權值。如下圖所示,共有4個葉子即...

二叉樹最大路徑和 python 二叉樹最大路徑和

1.題目描述 輸入乙個二叉樹層次遍歷的結果,輸出這個二叉樹最大路徑和。路徑不一定從根節點開始和葉子節點結束。只要是連續的路徑就可以。如輸入 10,9,20,null,null,15,7 109 20 15 7 輸出 42 2.首先將乙個陣列還原成乙個二叉樹。然後根絕二叉樹的根節點返回最大路徑和。cl...

二叉樹最大路徑之和

binary tree maximum path sum 解題思路 這道題是求樹的路徑和的題目,不過和平常不同的是這裡的路徑不僅可以從根到某乙個結點,而且路徑可以從左子樹某乙個結點,然後到達右子樹的結點,就像題目中所說的可以起始和終結於任何結點。在這裡樹沒有被看成有向圖,而是被當成無向圖來尋找路徑。...