タイトル説明
入力バイナリツリーは、ツリーの深さを見つけます。ルートノードからリーフノードまでの経路ツリーを形成し、順次、ツリー内の最長パスの長さの深さ(ルート、リーフノードを含む)を通過します。
思考
再帰的。最長の道路、プラスルートノードの現在の同等のものを見つけて、左右のサブツリーからで最も深い道を選択します。
# -*- 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