溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

大數(shù)據(jù)中樹的翻轉(zhuǎn)樹算法怎么實現(xiàn)

發(fā)布時間:2021-11-23 11:04:10 來源:億速云 閱讀:152 作者:小新 欄目:大數(shù)據(jù)

這篇文章主要為大家展示了“大數(shù)據(jù)中樹的翻轉(zhuǎn)樹算法怎么實現(xiàn)”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“大數(shù)據(jù)中樹的翻轉(zhuǎn)樹算法怎么實現(xiàn)”這篇文章吧。

算法:

個人覺得這種類型題目的根本在于對題目的理解,所以理解翻轉(zhuǎn)二叉樹的定義就很重要。

 我們先看下什么是翻轉(zhuǎn)二叉樹:翻轉(zhuǎn)的意思就是根節(jié)點不變,左右子樹交換位置,當(dāng)然這里的左右子樹也得是翻轉(zhuǎn)之后的二叉樹。

解法:

1.空節(jié)點和單個節(jié)點的二叉樹是不需要翻轉(zhuǎn)的。2.1)兩個以上的節(jié)點的二叉樹,首先翻轉(zhuǎn)各自的左右子樹,  2)然后與根節(jié)點的左右子樹交換位置。

題目1:

https://leetcode-cn.com/problems/invert-binary-tree/

大數(shù)據(jù)中樹的翻轉(zhuǎn)樹算法怎么實現(xiàn)

代碼實現(xiàn):

/** * Definition for a binary tree node. * type TreeNode struct { *     Val int *     Left *TreeNode *     Right *TreeNode * } */func invertTree(root *TreeNode) *TreeNode {    // 1.根節(jié)點是nil直接返回    if root == nil {         return root    }    // 2. 左右節(jié)點先翻轉(zhuǎn)子樹,再翻轉(zhuǎn)孩子    l := invertTree(root.Left)    r := invertTree(root.Right)    root.Left,root.Right = r,l    return root }

執(zhí)行結(jié)果:

大數(shù)據(jù)中樹的翻轉(zhuǎn)樹算法怎么實現(xiàn)

題目2:

解法:

是題目1的變形題目:二叉樹部分翻轉(zhuǎn)我們觀察翻轉(zhuǎn)二叉樹會發(fā)現(xiàn),翻轉(zhuǎn)后的節(jié)點他們所處的層次沒有變化,只是左右交換了位置,基于這個原因,我們將本題目拆分成。1.兩棵樹的左子樹與右子樹都相同。2.兩棵樹的左子樹==右子樹,并且右子樹==左子樹。3.兩棵樹都為nil的話,是相同的。4.兩棵樹一棵為nil,則不相同。5.兩棵樹的根節(jié)點數(shù)值不相同則整棵樹就不相同。

https://leetcode-cn.com/problems/flip-equivalent-binary-trees/

大數(shù)據(jù)中樹的翻轉(zhuǎn)樹算法怎么實現(xiàn)

代碼實現(xiàn):

/** * Definition for a binary tree node. * type TreeNode struct { *     Val int *     Left *TreeNode *     Right *TreeNode * } */func flipEquiv(root1 *TreeNode, root2 *TreeNode) bool {    // 1. root1,root2 都為nil的情況    if root1 == root2 {        return true    }    // 2. root1,root2有一個為nil,另一個不為nil 或者 root1與root2不相同    if root1 == nil || root2 == nil || root1.Val != root2.Val {        return false    }    // 3. root1,root2都相同,進一步檢查他們的孩子,無非就是下面兩種    return (flipEquiv(root1.Left,root2.Left) && flipEquiv(root1.Right,root2.Right)) ||    (flipEquiv(root1.Right,root2.Left)&& flipEquiv(root1.Left,root2.Right))}

執(zhí)行結(jié)果:

大數(shù)據(jù)中樹的翻轉(zhuǎn)樹算法怎么實現(xiàn)

以上是“大數(shù)據(jù)中樹的翻轉(zhuǎn)樹算法怎么實現(xiàn)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI