(二叉树的遍历)Tree UVa 548
題目:
給一棵點(diǎn)帶權(quán)(權(quán)值各不相同,都是小于10000的正整數(shù))的二叉樹(shù)的中序和后序遍
歷,找一個(gè)葉子使得它到根的路徑上的權(quán)和最小。如果有多解,該葉子本身的權(quán)應(yīng)盡量小。
輸入中每?jī)尚斜硎疽豢脴?shù),其中第一行為中序遍歷,第二行為后序遍歷。
樣例輸入:
3 2 1 4 5 7 6
3 1 2 5 6 7 4
7 8 11 3 5 16 12 18
8 3 11 7 16 18 12 5
255
255
樣例輸出:
1
3
255
分析與解答
1.先序遍歷:根左右。中序遍歷:左根右。后序遍歷:左右根
2.通過(guò)遞歸把每個(gè)根連的子樹(shù)分別輸入到lch[],rch[]
中序:3,2,1,4,5,7,6
后序:3,1,2,5,6,7,4
根節(jié)點(diǎn)4
左子樹(shù)a元素:3,2,1
同時(shí)左子樹(shù)a的后序是:3,1,2
因此左子樹(shù)a根節(jié)點(diǎn)是:2
左子樹(shù)b元素:3
左子樹(shù)b根節(jié)點(diǎn):3
左子樹(shù)c的最右邊元素下標(biāo)為b根節(jié)點(diǎn)下標(biāo)減一,但此時(shí)b下標(biāo)為零,所以最右邊元素下標(biāo)為-1.我們認(rèn)為最左子樹(shù)c最左邊元素下標(biāo)為0,顯然此時(shí)l1>r1不成立,遞歸結(jié)束,我們返回0
lch[3]=0 ——> lch[2]=3——>lch[4]=2
lch[root]=leftleaf
表示一個(gè)根root所連的左子葉
rch[root]=rightleaf
表示一個(gè)根root所連的右子葉
3.葉子到根上路徑權(quán)和最小,如果有多解,葉子本身權(quán)應(yīng)盡量小
lch[root]=leftleaf,而每一個(gè)子葉都相當(dāng)于一個(gè)子樹(shù)的根,因此我們可以從根到子葉進(jìn)行遍歷,每次sum加上子葉的值,然后進(jìn)行限制條件判斷
4.輸入存到兩個(gè)數(shù)組里的方法
由于輸入是不定長(zhǎng)的,所以利用string,然后stringstream重定向輸入到數(shù)組里
5.代碼參照劉汝佳,以后復(fù)習(xí)再重新寫(xiě)一遍
總結(jié)
以上是生活随笔為你收集整理的(二叉树的遍历)Tree UVa 548的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: docker 查看镜像_Docker 核
- 下一篇: 的向上取整函数_计算机二级Excel常用