操作給定的二叉樹,將其變換為源二叉樹的映象。
二叉樹的映象定義:源二叉樹對我而言,第一眼看上去就像一道遞迴題。言歸正傳,所謂的映象二叉樹無非就是左右交換,你可以自頂向下地左右交換,也可以自底向上地左右交換。對我來說,可能自底向上地左右交換更好實現一些,那麼我們就成功地將問題轉化成了一道dfs題。如下圖所示:先深度優先遍歷交換子節點(遞),而後向上交換父節點(歸)。8/ \
6 10
/ \ / \
5 7 9 11
映象二叉樹
8/ \
10 6
/ \ / \
11 9 7 5
# -*- coding:utf-8 -*-
# class treenode:
# def __init__(self, x):
# self.val = x
# self.left = none
# self.right = none
class solution:
# 返回映象樹的根節點
def mirror(self, root):
# write code here
if root is none:
return
return self.dfs(root) # dfs入口
def dfs(self, node):
if node is none:
return none
left_val = self.dfs(node.left) # 訪問左節點
right_val = self.dfs(node.right) # 訪問右節點
node.left, node.right = right_val, left_val # 交換左右節點
return node # 返回父節點
平衡二叉樹例題 平衡二叉樹
acwing 72.平衡二叉樹 思路一 求每個節點的左右子樹深度,根據深度差判斷,直到葉子節點結束,效率不夠高,每個節點都要用兩次計算深度的遞迴函式 思路二 從葉子節點開始,計算深度差,一旦有深度差大於1的,就直接返回0,也不用管上面的深度是不是正確了,畢竟我們只需要true和false兩種狀態,省...
二叉樹 二叉樹
題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...
二叉樹遞迴詳解
請問這段 的執行步驟 重點是遞迴呼叫那段 最好每一步都寫出來 哪步哪個資料進棧,什麼時候出棧,請明白人來給講解一下。連題都看不懂的請一起等待答案。謝謝.重點是遞迴呼叫的部分,前面的結構就不用了。struct bitree void preorder struct bitree root void p...