合併二叉樹 合併兩個有序鍊錶

2021-10-17 03:59:46 字數 1694 閱讀 5272

今天開始刷力扣100,每天都刷,不刷是狗

方法一:遞迴法

終止條件,兩棵樹的任意一顆沒有即終止

既是終止條件,也是判斷corner case

if

not t1:

return t2

ifnot t2:

return t1

每個遞迴中的任務:

t3=treenode(t1.val+t2.val)
執行遞迴,左右子樹的遞迴

t3.left=self.merge(t1.left,t2.left)

t3.right=self.merge(t1.right,t2.right)

方法二 迭代法or廣度優先遍歷

需要借助額外的佇列實現

首先也是判斷corner case

if

not t1:

return t2

ifnot t2:

return t1

先把t1,t2放入佇列中

queue=

[(t1,t2)

]

開始遍歷queue

while queue:

r1,r2=queue.pop(0)

if r1.left and r2.left:

(r1.left,r2.left)

)elif

not r1.left:

r1,left=r2.left

if r1.right and r2.right:

(r1.right,r2.right)

)elif

not r1.right:

r1.right=r2.right

return t1

也有兩種方法,遞迴和迭代

方法一,遞迴

if

not l1:

return l2

ifnot l2:

return l1

if l1.vall1.

next

=self.mergelist(l1.

next

,l2)

return l1

else

: l2.

next

=self.mergelist(l1,l2.

next

)return l2

方法二,迭代

dummy=listnode(-1

)pre=dummy

while l1 and l2:

if l1.valpre.

next

=l1 l1=l1.

next

else

: pre.

next

=l2 l2=l2.

next

pre=pre.

next

pre.

next

=l1 if

not l2 else l1

return dummy.

next

合併兩個二叉樹

給定兩個二叉樹,想象當你將它們中的乙個覆蓋到另乙個上時,兩個二叉樹的一些節點便會重疊。你需要將他們合併為乙個新的二叉樹。合併的規則是如果兩個節點重疊,那麼將他們的值相加作為節點合併後的新值,否則不為 null 的節點將直接作為新二叉樹的節點。示例 1 輸入 tree 1 tree 2 1 2 3 2...

合併兩個有序鍊錶

鍊錶的題目總是讓我很惆悵。動輒就會runtime error。比如這題,額外用了乙個節點的空間來儲存頭節點。我很不情願多用這個空間,不過貌似不行。貌似不行,實際可行,見附錄。把頭節點提出迴圈 實現類 class solution else if l1 null p next l1 if l2 nul...

合併兩個有序鍊錶

三個指標乙個儲存la鍊錶 乙個儲存lb鍊錶,乙個指向新的鍊錶。鍊錶的插入,兩個指標,乙個是head,乙個指向head後面的鏈,新插入的元素位於head後面。執行該 自己外加上class類。static class node public static void main string args st...