zoukankan      html  css  js  c++  java
  • 剑指offer 平衡二叉树

    剑指offer 牛客网 平衡二叉树

    # -*- coding: utf-8 -*-
    """
    Created on Wed Apr 10 09:59:37 2019
    
    @author: Administrator
    题目:
    输入一棵二叉树,判断该二叉树是否是平衡二叉树。
    思路:
    从平衡二叉树的定义入手,:
    step1:左子树和右子树的高度差的绝对值不能超过1
    step2:左子树和右子树也是平衡二叉树
    我们写两个函数,返回其树的高度,比较是否高度差小于1,其次递归调用左右子树
    """
    
    # -*- 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
            if not pRoot:                       #空数为平衡二叉树
                return True
            left = self.TreeDepth(pRoot.left)   #得到左子树的高度
            right = self.TreeDepth(pRoot.right) #得到右子树的高度
            if abs(left - right) > 1:           #比较左右子树的高度差
                return False                    #若大于1,就不是平衡二叉树
                                                #再递归调用左右子树,也是平衡二叉树,用and
            return self.IsBalanced_Solution(pRoot.left) and self.IsBalanced_Solution(pRoot.right)
                                                #函数,返回其树的深度
        def TreeDepth(self,pRoot):
            if not pRoot:                       #如果为空节点就返回0
                return 0
            left = self.TreeDepth(pRoot.left)   #得到左子树的高度
            right = self.TreeDepth(pRoot.right) #得到右子树的高度
            return max(left+1,right+1)          #返回高度叠加
    if __name__ == '__main__':
        solution = Solution()
        
        #1 2 3 4 5 6 7 8 9
        n = TreeNode(9)
        node = TreeNode(8)
        node_left = TreeNode(1)
        node_right = TreeNode(3)
        node.left = n
        node_left.left = node
        root_left = TreeNode(2)
        root_left.left = node_left
        root_left.right = node_right
        
        node_left = TreeNode(5)
        node_right = TreeNode(7)
        root_right = TreeNode(6)
        root = TreeNode(4)
        root.left = root_left
        root_right.left = node_left
        root_right.right = node_right
        root.right = root_right
        
        res = solution.IsBalanced_Solution(root)
        print(res)                              #这个不是平衡二叉树,因为左子树高度为2,右子树为0
  • 相关阅读:
    深入剖析RocketMQ源码-NameServer
    Percolator模型及其在TiKV中的实现
    源码解读Dubbo分层设计思想
    vivo营销自动化技术解密|开篇
    Node.js 应用全链路追踪技术——[全链路信息获取]
    Linux系统 usermod -a -G 不重启 立即生效
    安装Docker和Docker-Compose工具
    linux 启动停止jar
    check_ffmpeg_status
    shell 的字符完全匹配
  • 原文地址:https://www.cnblogs.com/missidiot/p/10681985.html
Copyright © 2011-2022 走看看