日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[二叉树] 判断一个二叉树是否是平衡(剑指offer39)

發布時間:2023/12/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [二叉树] 判断一个二叉树是否是平衡(剑指offer39) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【試題描述】定義一個函數,輸入一個鏈表,判斷鏈表是否存在環路

平衡二叉樹,又稱AVL樹。它或者是一棵空樹,或者是具有下列性質的二叉樹:它的左子樹和右子樹都是平衡二叉樹,且左子樹和右子樹的高度之差之差的絕對值不超過1。
?

問題:判斷一個二叉排序樹是否是平衡二叉樹這里是二叉排序樹的定義解決方案:根據平衡二叉樹的定義,如果任意節點的左右子樹的深度相差不超過1,那這棵樹就是平衡二叉樹。首先編寫一個計算二叉樹深度的函數,利用遞歸實現。

?

解題思路有兩種,只遍歷一次的方法最優。

重復遍歷多次:

在遍歷樹的每個結點的時候,調用函數TreeDepth得到它的左右子樹的深度。如果每個結點的左右子樹的深度相差都不超過1,則這是一顆平衡的二叉樹。這種方法的缺點是,首先判斷根結點是不是平衡的,需要使用TreeDepth獲得左右子樹的深度,然后還需要繼續判斷子樹是不是平衡的,還是需要使用TreeDepth獲得子樹的左右子樹的深度,這樣就導致了大量的重復遍歷。

方法一:

class Solution:def IsBalanced_Solution(self, pRoot):return self.TreeDepth(pRoot) != -1def TreeDepth(self, pRoot):# write code hereif not pRoot:return 0left_depth = self.TreeDepth(pRoot.left)if left_depth == -1:return -1right_depth = self.TreeDepth(pRoot.right)if right_depth == -1:return -1if abs(left_depth-right_depth) > 1:return -1return max(1+left_depth, 1+right_depth)class Solution:def IsBalanced_Solution(self, pRoot):# write code hereif pRoot is None:return Truedef TreeDepth(root):if root == None:return 0return 1+max(TreeDepth(root.left), TreeDepth(root.right))if abs(TreeDepth(pRoot.left) - TreeDepth(pRoot.right)) > 1:return Falseelse:return True

?

只遍歷一次:

重復遍歷會影響算法的性能,所以很有必要掌握不需要重復遍歷的方法。如果我們用后序遍歷的方式遍歷二叉樹的每一個結點,在遍歷到一個結點之前我們就已經遍歷了它的左右子樹。只要在遍歷每個結點的時候記錄它的深度(某一結點的深度等于它到葉結點的路徑的長度),我們就可以一邊遍歷一邊判斷每個結點是不是平衡的。

# -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution:def IsBalanced_Solution(self, pRoot):# write code here# 思路二:每個節點只遍歷一次的解法,后續遍歷每個節點depth = [0]# 想通過該遞歸函數判斷該樹是不是平衡二叉樹,同時還需要獲取左右子樹的深度,因此還需要傳入引用呢return self.IsBalanced(pRoot, depth) # 第二個參數要傳入引用def IsBalanced(self, pRoot, dep):if not pRoot: # 為None,表示空節點,深度為0,也算平衡二叉樹dep[0] = 0return Trueleft, right = [0], [0]if self.IsBalanced(pRoot.left, left) and self.IsBalanced(pRoot.right, right):if abs(left[0]-right[0]) <= 1:dep[0] = left[0]+1 if left[0] > right[0] else right[0] + 1return Truereturn False

?

?

?

總結

以上是生活随笔為你收集整理的[二叉树] 判断一个二叉树是否是平衡(剑指offer39)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 69xxxx国产| 男人爆操女人 | 人人爽人人爱 | 妺妺窝人体色WWW精品 | 欧美久久精品一级黑人c片 1000部多毛熟女毛茸茸 | 精品久久久久久久中文字幕 | 乱淫的女高中暑假调教h | 打屁股外国网站 | 日韩视频专区 | 日韩av导航 | 一二三区在线视频 | 91久久综合 | wwwxxx日韩 | 日韩成人av电影 | 国产精品久久久久久亚洲av | 精品韩国一区二区三区 | 国产偷人爽久久久久久老妇app | 国产精彩视频在线 | 亚洲成年网 | 成人午夜电影网站 | 亚洲4438| 亚洲一区二区三区网站 | 国产精品xx | youjizz.com国产| 玖操| 欧美美女一区二区三区 | 中文字幕在线观看免费高清 | 成年网站| 国产乱码精品一区二区三 | 三女同志亚洲人狂欢 | 伦理片中文字幕 | 2024av | 日韩av免费在线播放 | 91麻豆国产视频 | av线上免费观看 | 成人免费大全 | 老牛影视av牛牛影视av | 日韩精品欧美精品 | 欧美日韩三区 | av在线激情 | 射影院| www.777奇米| 性猛交xxxx乱大交孕妇2十 | 欧美一级特黄aa大片 | 国产精品区一区二 | 撒尿free性hd | 亚洲欧美日韩国产成人精品影院 | 免费在线黄色av | 女的被男的操 | 亚洲一二三区视频 | 国产一区二区免费在线 | 五月天av网 | 日本伊人色 | 国产精品无码人妻一区二区在线 | 免费在线看黄视频 | 国产免费无码一区二区视频 | 久久精品欧美日韩精品 | 超碰p| 日本少妇三级 | 色先锋av资源 | 久国产视频 | 毛片视| 波多野结衣高清电影 | 一区二区三区有限公司 | 长河落日电视连续剧免费观看01 | 伦理片久久 | 欧美拍拍视频 | 国产成人精品免高潮在线观看 | 第五色婷婷 | 农村妇女一区二区 | 中文字幕免费高清在线观看 | wwww在线观看 | 午夜激情视频网站 | 亚洲成人自拍网 | 国产精品第8页 | 国产精选一区二区 | 少妇 av| www.中文字幕 | 午夜天堂影院 | 国产精品视频久久 | 毛片视频免费播放 | 久久久久噜噜噜亚洲熟女综合 | 久久精品麻豆 | 国产视频在线观看免费 | 欧美久久久 | av色噜噜 | 黄色一级欧美 | 伊人tv | 男女日批在线观看 | 亚洲福利视频一区二区三区 | 久草免费在线观看视频 | 久久夜精 | 久久人妻一区二区 | 免费在线观看的av | 香蕉国产在线 | 国内成人精品视频 | 国产第9页 | 午夜宅男影院 | 美女热逼 |