前往
大廳
主題

LeetCode - 617. Merge Two Binary Trees 解題心得

Not In My Back Yard | 2020-12-07 00:00:09 | 巴幣 0 | 人氣 264

題目連結:


題目意譯:
給定兩個二元樹,並且現在想像一下當你將其中一棵樹覆蓋到另一棵上,兩棵樹彼此有些會因此互相重合,有些則不會。

你需要將這兩棵樹合併成一棵新的樹。合併的規則為:如果兩節點重疊了,則將兩節點之值加總即是重合後的新節點之值;反之,如果有非空節點遇到空節點,則直接將該非空節點作為新節點。

注:合併的過程應從兩棵樹各自的根節點開始。



範例測資:
輸入:
   樹 1      樹 2
    1      2
   / \    / \
  3   2  1     3
 /        \     \
5          4  7
輸出
合併後的樹:
    3
   / \
  4   5
 / \   \
5   4   7


解題思維:
遞迴即可。

假設函式名為 MERGE,參數為 *t1 、 *t2 代表兩樹的根節點,則對於每次的遞迴:
我們先判斷 t1 與 t2 是否一醫者為空。如果是則不須繼續遞迴,直接回傳非空的那個節點。如果兩者皆空則回傳空(NULL)。

若以上皆非,則我們建立一個新的節點 *T ,其節點值為 t1 與 t2 的節點值之和。接著我們各自遞迴合併 t1 、 t2 的左子樹與右子樹,即 MERGE(t1->left, t2->left) 和 MERGE(t1->right, t2->right)。

並將兩次遞迴的回傳值分別賦予到 T->left 以及 T->right 儲存。然後回傳 T 。

此即可完成要求。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作