題目描述給定一顆二叉樹的邏輯結構(先序遍歷的結果,空樹用字元『0』表示,例如ab0c00d00),建立該二叉樹的二叉鏈式儲存結構第一種方法,按照題目意思輸入n個結點,把n個節點放在乙個陣列,再把陣列內的值賦給結點,需要定義全域性變數二叉樹的每個結點都有乙個權值,從根結點到每個葉子結點將形成一條路徑,每條路徑的權值等於路徑上所有結點的權值和。程式設計求出二叉樹的最大路徑權值。如下圖所示,共有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
#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 解題思路 這道題是求樹的路徑和的題目,不過和平常不同的是這裡的路徑不僅可以從根到某乙個結點,而且路徑可以從左子樹某乙個結點,然後到達右子樹的結點,就像題目中所說的可以起始和終結於任何結點。在這裡樹沒有被看成有向圖,而是被當成無向圖來尋找路徑。...