力扣刷題 合併二叉樹

2021-10-09 21:58:37 字數 2912 閱讀 4649

題目描述:

給定兩個二叉樹,想象當你將它們中的乙個覆蓋到另乙個上時,兩個二叉樹的一些節點便會重疊。

你需要將他們合併為乙個新的二叉樹。合併的規則是如果兩個節點重疊,那麼將他們的值相加作為節點合併後的新值,否則不為 null 的節點將直接作為新二叉樹的節點。

算是第一次正式用力扣刷題,思路上是有想法的,但回歸到程式設計實現上卻無從下手。

這是作為乙個演算法小白的解題步驟,錯誤百出。比如不知道根節點在哪,看了解體思路才明白初始化定義的val是根節點,而且定義二叉樹必須先定義根節點。

個人錯誤解題思路(python3):

(一開始想找根節點,但忘了根節點是怎麼定義的,以為初始化裡的val是指結點數量)

直接判斷兩顆二叉樹的左子樹結點是否全空,都不是空結點相加,若有乙個為空則保留不為空的值。

接下來便不知如何去寫。

對於使用樹的方法不熟練,對於巢狀使用也不熟練。

# definition for a binary tree node.

# class treenode(object):

# def __init__(self, x):

# self.val = x

# self.left = none

# self.right = none

class solution(object):

def mergetrees(self, t1, t2):

""":type t1: treenode

:type t2: treenode

:rtype: treenode

"""if (t1.left!=null&&t2.left!=null):# 判斷左子樹是否都為空,如果都不為空,則合併後兩樹結點相加

self.left=t1.left.data+t2.left.data

elif(t1.right!=null&&t2.right!=null):# 判斷左子樹是否都為空,如果都不為空,則合併後兩樹結點相加

self.right=t1.left.data+t2.left.data

elif(t1.left==null&&t2.left!=null):

self.left=t2.left

elif(t1.left!=null&&t2.left==null):

self.left=t1.left

elif(t1.right==null&&t2.right!=null):

self.right=t2.right

elif(t1.right!=null&&t2.right==null):

self.right=t1.right

正確解題方法(python3):

1. 已給出**部分

# definition for a binary tree node.

# class treenode(object):

# def __init__(self, x):

# self.val = x

# self.left = none

# self.right = none

class solution(object):

def mergetrees(self, t1;treenode, t2:treenode)->treenode:

""":type t1: treenode

:type t2: treenode

:rtype: treenode

"""

2.對於樹的操作首先從根節點開始

2.1 根據題目,先判斷兩個根節點

if t1 and t2:#t1和t2都不為空

self.val=t1.val+t2.val

2.2接下來對兩個左右子樹結點進行計算

此時已經計算完根節點,可以將左子樹或右子樹的下一結都看作根節點,只需將結點向左向右遍歷即可,此時可用巢狀迴圈。

完整**如下

class solution:

def mergetrees(self, t1: treenode, t2: treenode) -> treenode:#返回值也為treenode

if t1 and t2 :

t1.val += t2.val # 每遍歷乙個結點都相加

t1.left = self.mergetrees(t1.left, t2.left)# 遍歷到左子樹就將左子樹帶入巢狀運算

t1.right = self.mergetrees(t1.right, t2.right)# 遍歷到右子樹就將右子樹結點帶入巢狀運算

return t1 # 最終將值都加到t1上,即將兩棵樹合併到t1樹

return t1 or t2 # 如果兩棵樹有一顆為空,則返回非空樹

3.官方題解(python3)

class solution:

def mergetrees(self, t1: treenode, t2: treenode) -> treenode:

if not t1:

return t2

if not t2:

return t1

merged = treenode(t1.val + t2.val)

merged.left = self.mergetrees(t1.left, t2.left)

merged.right = self.mergetrees(t1.right, t2.right)

return merged

二叉樹 力扣刷題

把二叉樹上的每乙個節點的左右子節點進行交換 definition for a binary tree node.public class treenode class solution 給定乙個 完美二叉樹 其所有葉子節點都在同一層,每個父節點都有兩個子節點。二叉樹定義如下 struct node ...

力扣617 合併二叉樹

給定兩個二叉樹,想象當你將它們中的乙個覆蓋到另乙個上時,兩個二叉樹的一些節點便會重疊。你需要將他們合併為乙個新的二叉樹。合併的規則是如果兩個節點重疊,那麼將他們的值相加作為節點合併後的新值,否則不為 null 的節點將直接作為新二叉樹的節點。示例 1 思路參考 我們可以對這兩棵樹同時進行前序遍歷,並...

力扣617 合併二叉樹

給定兩個二叉樹,想象當你將它們中的乙個覆蓋到另乙個上時,兩個二叉樹的一些節點便會重疊。你需要將他們合併為乙個新的二叉樹。合併的規則是如果兩個節點重疊,那麼將他們的值相加作為節點合併後的新值,否則不為 null 的節點將直接作為新二叉樹的節點。示例 1 思路參考 我們可以對這兩棵樹同時進行前序遍歷,並...