Swift-判斷二叉樹是否為平衡二叉樹

題目:輸入一棵二叉樹的根結點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意結點的左右子樹的深度相差不超過1,那么它就是一棵平衡二叉樹。例如,下圖中的二叉樹就是一棵平衡二叉樹.


二叉平衡樹.jpg

最簡單的解法是遍歷每個節點左右節點深度,進行對比:
<pre><code>`
func isBalanceTree(rootNode:TreeNode?) -> Bool {
if rootNode == nil {
return true
}
let leftDepth:Int = treeMaxDepth(rootNode: rootNode?.leftChild)
let rightDepth:Int = treeMaxDepth(rootNode: rootNode?.rightChild)

    let diff:Int = leftDepth - rightDepth
    if diff > 1 || diff < -1 {
        return false
    }
    return isBalanceTree(rootNode: rootNode?.leftChild) && isBalanceTree(rootNode: rootNode?.rightChild)
}
`</code></pre>

上述解法不夠高效,我們可以每次遍歷的時候記錄一下深度:
<pre><code>`

func isBalanceTreeOnce(rootNode:TreeNode?,depth:inout Int) -> Bool {
    if rootNode == nil {
        depth = 0
        return true
    }
    var leftDepth:Int = 0
    var rightDepth:Int = 0
    if isBalanceTreeOnce(rootNode: rootNode?.leftChild, depth: &leftDepth) && isBalanceTreeOnce(rootNode: rootNode?.rightChild, depth: &rightDepth) {
        let diff:Int = leftDepth - rightDepth
        if diff <= 1 && diff >= -1 {
            depth = leftDepth > rightDepth ? leftDepth + 1 : rightDepth + 1
            return true
        }
    }
    return false
}

func isBalancedTree(rootNode:TreeNode?) -> Bool {
    var depth:Int = 0
    return isBalanceTreeOnce(rootNode: rootNode, depth: &depth)
}`</code></pre>

測試代碼:
<pre><code>`
var isBalance:Bool = binaryTreePath.isBalanceTree(rootNode: preRootNode)
print("FlyElephant-(depthData)二叉平衡樹--(isBalance)")

var isBalance2:Bool = binaryTreePath.isBalancedTree(rootNode: preRootNode)
print("FlyElephant-(depthData)二叉平衡樹--(isBalance2)")`</code></pre>

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 樹的概述 樹是一種非常常用的數據結構,樹與前面介紹的線性表,棧,隊列等線性結構不同,樹是一種非線性結構 1.樹的定...
    Jack921閱讀 4,489評論 1 31
  • 四、樹與二叉樹 1. 二叉樹的順序存儲結構 二叉樹的順序存儲就是用數組存儲二叉樹。二叉樹的每個結點在順序存儲中都有...
    MinoyJet閱讀 1,587評論 0 7
  • B樹的定義 一棵m階的B樹滿足下列條件: 樹中每個結點至多有m個孩子。 除根結點和葉子結點外,其它每個結點至少有m...
    文檔隨手記閱讀 13,355評論 0 25
  • 0. 什么是樹 數據的基本單位是數據元素,在涉及到數據處理時數據元素之間的關系稱之為結構,我們依據數據元素之間關系...
    安安zoe閱讀 499評論 0 0
  • 數據結構與算法--從平衡二叉樹(AVL)到紅黑樹 上節學習了二叉查找樹。算法的性能取決于樹的形狀,而樹的形狀取決于...
    sunhaiyu閱讀 7,685評論 4 32