詳解二叉樹遞迴經典例題 二叉樹的映象

2021-10-09 08:22:45 字數 1006 閱讀 9087

操作給定的二叉樹,將其變換為源二叉樹的映象。

二叉樹的映象定義:源二叉樹 

8/ \

6 10

/ \ / \

5 7 9 11

映象二叉樹

8/ \

10 6

/ \ / \

11 9 7 5

對我而言,第一眼看上去就像一道遞迴題。言歸正傳,所謂的映象二叉樹無非就是左右交換,你可以自頂向下地左右交換,也可以自底向上地左右交換。對我來說,可能自底向上地左右交換更好實現一些,那麼我們就成功地將問題轉化成了一道dfs題。如下圖所示:先深度優先遍歷交換子節點(遞),而後向上交換父節點(歸)。

# -*- 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...