美文网首页剑指offer-python
求二叉树的深度、判断是否为平衡二叉树

求二叉树的深度、判断是否为平衡二叉树

作者: 小歪与大白兔 | 来源:发表于2018-08-28 16:39 被阅读0次

题目一:
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
思路:

  • 如果树只有一个节点,那么深度为1
  • 如果树的根节点只有左子树,没有右子树,那么深度等于左子树的深度+1
  • 如果树的根节点只有右子树,没有左子树,那么深度等于右子树的深度+1
  • 如果树的根节点既有左子树又有右子树,那么深度等于max(left,right)+ 1
# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    def TreeDepth(self, pRoot):
        # write code here
        if pRoot is None:
            return 0
        left = self.TreeDepth(pRoot.left)
        right = self.TreeDepth(pRoot.right)
        return max(left,right)+1

题目二
输入一棵二叉树,判断该二叉树是否是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它是一颗平衡二叉树。
思路一:
采用上一题计算深度的思路,调用TreeDepth得到左右子树的深度,判断其差值是否大于1 。

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    def TreeDepth(self, pRoot):
        # write code here
        if pRoot is None:
            return 0
        left = self.TreeDepth(pRoot.left)
        right = self.TreeDepth(pRoot.right)
        return max(left,right)+1

    def IsBalanced_Solution(self, pRoot):
        # write code here
        if pRoot is None:
            return  True
        left = self.TreeDepth(pRoot.left)
        right = self.TreeDepth(pRoot.right)
        diff = abs(left-right)
        if diff > 1:
            return False
        return self.IsBalanced_Solution(pRoot.left) and self.IsBalanced_Solution(pRoot.right)

相关文章

  • 判断一个树是否是BST 求一棵平衡二叉树的最小深度 判断一棵二叉树是否高度平衡

  • 二叉树笔试面试题集合

    二叉树深度 判断平衡二叉树 一种方法 可以利用求二叉树深度,从根节点开始递归。再求左右深度进行比较。最后求到叶子节...

  • 二叉树的层次遍历要先掌握 有一些题目是相似的比如:求二叉树的深度和是否为平衡二叉树;是否是相同的二叉树,是否为对称...

  • 面试题55_2:判断是否是平衡二叉树

    输入一棵二叉树,判断该二叉树是否是平衡二叉树 思路一:递归求每个子节点的深度,遇到深度差超过1的即不满足条件,如果...

  • 判断平衡二叉树——Python

    给定一棵二叉树,判断它是否为平衡二叉树。 平衡二叉树的定义是:如果某二叉树中任意节点的左右子树的深度相差不超过1,...

  • 判断二叉树是否平衡

    子树 平衡二叉树 判断是否为平衡二叉树 在遍历树的每个结点的时候,调用函数TreeDepth得到它的左右子树的深度...

  • 1 二叉树的最近公共祖先(leetcode 236) 2 判断是否为平衡二叉树 3 判断二叉树是否为满二叉树 4 ...

  • swift 二叉树

    二叉树 创建二叉查找树 前序 中序 后序 遍历(递归/非递归) 深度 判断是否为二叉平衡树 判断是否为二叉平衡树 ...

  • 二叉树的深度和平衡二叉树(LeetCode 剑指Offer 55

    题目 输入一棵二叉树的根节点,求该树的深度。输入一棵二叉树的根节点,判断该树是不是平衡二叉树。 二叉树的深度 解析...

  • 求树的深度&判断两棵树是否相同

    求二叉树的深度(递归) 判断两棵树是否相同

网友评论

    本文标题:求二叉树的深度、判断是否为平衡二叉树

    本文链接:https://www.haomeiwen.com/subject/jbrqwftx.html