剑指offer- 求树的深度

冷暖自知 提交于 2020-03-12 13:42:15

题目描述

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

思路

用递归。找到最长的路,相当于 加上当前的根节点,然后从左右子树中选择出最深的路。

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    def TreeDepth(self, pRoot):
        if pRoot:
            return self.getPathLength(pRoot,0)
        else:
            return 0
    def getPathLength(self,root,length):
        if root:
            length+=1
            length = max([self.getPathLength(root.left,length),self.getPathLength(root.right,length)])
        return length

 

下面这个题类似

题目描述

输入一棵二叉树,判断该二叉树是否是平衡二叉树。

思路

平衡二叉树的定义,左右子树深度差值不能超过1,而且左右子树都是平衡二叉树

所以还是用递归。递归过程中发现左右子树深度差值超过1了,就返回False,否则返回深度。  ps:这里就要注意要在一开始的时候,设置深度为1。不然没有办法根据这个函数的返回值判断,到底是深度为0,还是返回了False

class Solution:
    def IsBalanced_Solution(self, pRoot):
        if not pRoot:
            return True
        else:
            depth = self.getDepth(pRoot,1)
            if not depth:
                return False
            else:
                return True
            
    def getDepth(self,root,length):
        if root:
            length += 1
            left = self.getDepth(root.left,length)
            right = self.getDepth(root.right,length)
            if not left or not right:
                return False
            elif abs(left-right)>1:
                return False
            else:
                length = max([left,right])
        return length

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!