今天開始刷力扣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...