题目描述
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
思路
用递归。找到最长的路,相当于 加上当前的根节点,然后从左右子树中选择出最深的路。
# -*- 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
来源:CSDN
作者:titake
链接:https://blog.csdn.net/qq_22498427/article/details/104815880