您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“大數據中樹的翻轉樹算法怎么實現”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“大數據中樹的翻轉樹算法怎么實現”這篇文章吧。
算法:
個人覺得這種類型題目的根本在于對題目的理解,所以理解翻轉二叉樹的定義就很重要。
我們先看下什么是翻轉二叉樹:翻轉的意思就是根節點不變,左右子樹交換位置,當然這里的左右子樹也得是翻轉之后的二叉樹。
解法:
1.空節點和單個節點的二叉樹是不需要翻轉的。2.1)兩個以上的節點的二叉樹,首先翻轉各自的左右子樹, 2)然后與根節點的左右子樹交換位置。
題目1:
https://leetcode-cn.com/problems/invert-binary-tree/
代碼實現:
/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */func invertTree(root *TreeNode) *TreeNode { // 1.根節點是nil直接返回 if root == nil { return root } // 2. 左右節點先翻轉子樹,再翻轉孩子 l := invertTree(root.Left) r := invertTree(root.Right) root.Left,root.Right = r,l return root }
執行結果:
題目2:
解法:
是題目1的變形題目:二叉樹部分翻轉我們觀察翻轉二叉樹會發現,翻轉后的節點他們所處的層次沒有變化,只是左右交換了位置,基于這個原因,我們將本題目拆分成。1.兩棵樹的左子樹與右子樹都相同。2.兩棵樹的左子樹==右子樹,并且右子樹==左子樹。3.兩棵樹都為nil的話,是相同的。4.兩棵樹一棵為nil,則不相同。5.兩棵樹的根節點數值不相同則整棵樹就不相同。
https://leetcode-cn.com/problems/flip-equivalent-binary-trees/
代碼實現:
/** * 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))}
執行結果:
以上是“大數據中樹的翻轉樹算法怎么實現”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。