ツリーの深オファー安全性を証明するために探しています

タイトル説明

入力バイナリツリーは、ツリーの深さを見つけます。ルートノードからリーフノードまでの経路ツリーを形成し、順次、ツリー内の最長パスの長さの深さ(ルート、リーフノードを含む)を通過します。

思考

再帰的。最長の道路、プラスルートノードの現在の同等のものを見つけて、左右のサブツリーからで最も深い道を選択します。

# -*- 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

 

公開された82元の記事 ウォンの賞賛2 ビュー4354

おすすめ

転載: blog.csdn.net/qq_22498427/article/details/104815880