題目描述:
給定兩個二叉樹,想象當你將它們中的乙個覆蓋到另乙個上時,兩個二叉樹的一些節點便會重疊。
你需要將他們合併為乙個新的二叉樹。合併的規則是如果兩個節點重疊,那麼將他們的值相加作為節點合併後的新值,否則不為 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 思路參考 我們可以對這兩棵樹同時進行前序遍歷,並...