快手筆試題 將滿二叉樹轉換為求和樹

2021-09-26 18:59:07 字數 1355 閱讀 7950

給滿出二叉樹,編寫演算法將其轉化為求和樹

什麼是求和樹:二叉樹的求和樹, 是一顆同樣結構的二叉樹,其樹中的每個節點將包含原始樹中的左子樹和右子樹的和。

二叉樹:

10/      \

-2        6

/   \      /  \ 

8    -4    7    5

求和樹:

20(4-2+12+6)

/      \

4(8-4)      12(7+5)

/   \      /  \ 

0      0    0    0

二叉樹給出前序和中序輸入,求和樹要求中序輸出;

所有處理資料不會大於int;

輸入描述

2行整數,第1行表示二叉樹的前序遍歷,第2行表示二叉樹的中序遍歷,以空格分割
輸出描述

1行整數,表示求和樹的中序遍歷,以空格分割
輸入

10 -2 8 -4 6 7 5

8 -2 -4 10 7 6 5

輸出

0 4 0 20 0 12 0
這題卡記憶體。在重構二叉樹的時候,不能用雜湊表儲存中序遍歷結果。

這題不用重構二叉樹(在樹的資訊中加乙個sum屬性),然後再中序遍歷輸出。可以再重構的時候直接求得中序遍歷結果

#include #include #include #include using namespace std;

int dfs(vector& pre, vector& vin, vector& res, int pl, int pr, int vl, int vr);

vectorrebuildtree(vector& pre, vector& vin)

int dfs(vector& pre, vector& vin, vector& res, int pl, int pr, int vl, int vr)

int main()

while (cin)

vectorres = rebuildtree(pre, vin);

if (!res.empty()) cout << res[0];

for (int i = 1; i < res.size(); i++)

cout << " " << res[i];

cout << endl;

}

將滿二叉樹轉換為求和樹

在網上看到乙個道題目覺的有些意思分享給大家。給滿出二叉樹,編寫演算法將其轉化為求和樹 什麼是求和樹 二叉樹的求和樹,是一顆同樣結構的二叉樹,其樹中的每個節點將包含原始樹中的左子樹和右子樹的和。二叉樹 10 2 6 8 4 7 5 求和樹 20 4 2 12 6 4 8 4 12 7 5 0 0 0 ...

python 將滿二叉樹轉換成求和樹

思路 根據前序遍歷和中序遍歷構造樹,唯一的區別在於 根節點的取值 不再是root.val而是sum pre 1 除了根節點之外的所有節點和。class tree def init self,x self.val x self.left none self.right none pre list ma...

樹轉換為二叉樹

輸入一顆普通有序樹,將它轉換為對應的二叉鍊錶儲存,然後輸出該二叉樹的先序和後序遍歷序列。包含多組測試資料。每組測試資料第1行為樹的結點個數n 1 n 26 接下來包含n行,其中第i行 1 n n 的資料依次為結點i的資料值ai 為乙個小寫字母 後面各元素為結點i的兒子序列,以0結束。若ai後僅含乙個...