(二叉树的遍历)Tree UVa 548
題目:
給一棵點帶權(權值各不相同,都是小于10000的正整數)的二叉樹的中序和后序遍
歷,找一個葉子使得它到根的路徑上的權和最小。如果有多解,該葉子本身的權應盡量小。
輸入中每兩行表示一棵樹,其中第一行為中序遍歷,第二行為后序遍歷。
樣例輸入:
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.通過遞歸把每個根連的子樹分別輸入到lch[],rch[]
中序:3,2,1,4,5,7,6
后序:3,1,2,5,6,7,4
根節點4
左子樹a元素:3,2,1
同時左子樹a的后序是:3,1,2
因此左子樹a根節點是:2
左子樹b元素:3
左子樹b根節點:3
左子樹c的最右邊元素下標為b根節點下標減一,但此時b下標為零,所以最右邊元素下標為-1.我們認為最左子樹c最左邊元素下標為0,顯然此時l1>r1不成立,遞歸結束,我們返回0
lch[3]=0 ——> lch[2]=3——>lch[4]=2
lch[root]=leftleaf
表示一個根root所連的左子葉
rch[root]=rightleaf
表示一個根root所連的右子葉
3.葉子到根上路徑權和最小,如果有多解,葉子本身權應盡量小
lch[root]=leftleaf,而每一個子葉都相當于一個子樹的根,因此我們可以從根到子葉進行遍歷,每次sum加上子葉的值,然后進行限制條件判斷
4.輸入存到兩個數組里的方法
由于輸入是不定長的,所以利用string,然后stringstream重定向輸入到數組里
5.代碼參照劉汝佳,以后復習再重新寫一遍
總結
以上是生活随笔為你收集整理的(二叉树的遍历)Tree UVa 548的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: docker 查看镜像_Docker 核
- 下一篇: 的向上取整函数_计算机二级Excel常用