python 得到树的深度、判断树是否为平衡树

来源:互联网 发布:前海人工智能主题混合 编辑:程序博客网 时间:2024/05/16 16:03

0. 树中结点的结构:

 class TreeNode:     def __init__(self, x):         self.val = x         self.left = None         self.right = None   

1. 树的深度:

    def TreeDepth(self,pRoot):        if(not pRoot):            return 0        else:            nLeft = self.TreeDepth(pRoot.left)            nRight = self.TreeDepth(pRoot.right)            return max(nLeft+1,nRight+1)

解释:nLeft,nRight 分别表示pRoot的左右结点的深度,返回两者中较大的,即为深度。


2. 判断是否为平衡树:

平衡树:树中任意结点的左右子树深度差小于或者等于1.

    def IsBalanced_Solution(self, pRoot):  #判断是否为平衡二叉树        if(not pRoot):            return True        else:            if abs(self.TreeDepth(pRoot.left)-self.TreeDepth(pRoot.right))>1:      #当某一结点的左右子树高度差大于1时,返回False                return False            else:                return self.IsBalanced_Solution(pRoot.left) and self.IsBalanced_Solution(pRoot.right)    #否则递归地向下判断其子树是否平衡。

这里解释一下为什么要 “递归地向下判断其子树是否平衡”:

如下图所示:若pRoot=A,则左右高度相差为1,满足平衡树的条件。但是,pRoot=B 时,左右的高度差为2,则不满足平衡树,因此,我们需要递归地向下判断每个结点的子树是否平衡。


总代码:

class Solution:    def IsBalanced_Solution(self, pRoot):  #判断是否为平衡二叉树        if(not pRoot):            return True        else:            if abs(self.TreeDepth(pRoot.left)-self.TreeDepth(pRoot.right))>1:                return False            else:                return self.IsBalanced_Solution(pRoot.left) and self.IsBalanced_Solution(pRoot.right)                                            def TreeDepth(self,pRoot):        if(not pRoot):            return 0        else:            nLeft = self.TreeDepth(pRoot.left)            nRight = self.TreeDepth(pRoot.right)            return max(nLeft+1,nRight+1)



0 0
原创粉丝点击