您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“大數(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/
代碼實現(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é)果:
題目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/
代碼實現(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)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(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)容。