可以宣告一個 map<int, pair<int, int>> MAP 來紀錄每一個節點的左右節點是什麼,並且宣告一個 map<int, int>ans 來存答案。
跑一個 DFS,需要的參數是目前要分的蛋糕數量 cake 和目前的節點位置 pos。預設一個變數 split 為 1,代表需要分蛋糕給多少人,如果 MAP[pos].first != -1,代表左邊有人,所以 split++,同樣如果 MAP[pos].second != -1 就代表右邊有人,所以一樣要 split++。如果 split == 1 ,代表已經不會繼續往下走了,將 ans[pos] 設為 cake 並且 return。
如果 DFS 要繼續往下走,則宣告一個變數 divide 為 cake/split,並且先將 ans[pos] 設為 divide。如果 cake % split != 0,則要將多餘的分給目前位置,所以要 ans[pos] += cake % split。
如果目前位置左邊有節點的話就呼叫 DFS,只是蛋糕數量變成 divide,並且目前位置變成 MAP[pos].first,相同道理也用在右邊。
最後跑一個 For迴圈,從 1 到 N-1,將 ans 中的資料輸出。