別のツリーの解のpython3 leetcodeサブツリー

問題の説明:

二つの非空のバイナリツリーsおよびtが与えられると、ツリーTがSのサブツリーと全く同じ構造及びノード値を持っているかどうかをチェック。Sのサブツリーはツリーがs内のノードと、このノードの子孫のすべてで構成されています。ツリーsはまた、自身のサブツリーとして考えることができます。

例1:
木秒を考えます:

     3 
    / \ 
   5 
  / \ 
 1 2

与えられた木T:

   4 
  / \ 
 1 2

TがSのサブツリーと同じ構造及びノード値を有するので、trueを返します。

 

例2:
木Sを考えます:

     3 
    / \ 
   5 
  / \ 
 1 2 
    / 
   0

与えられた木T:

   4 
  / \ 
 1 2

falseを返します。

問題解決のアイデア:

トピック・ツリーでは、最初の反応は、この質問は例外ではありません答えるためにDFSを使用することです。

コード:

1  クラスのソリューション:
 2      DEF isSubtree(セルフ、S:ツリーノード、T:ツリーノード) - > BOOL:
 3          DEF DFS(B):
 4。             IF  ていない A または れていない B:  Ruoguoヌルの存在下で、B、処理手段
5に                 戻り ません はありませんB
 。6              以下のプロセスA、Bは、ヌルが論じないどちらの場合である
。7              IF a.val == b.val および DFS(a.left、b.left)およびDFS( a.right、b.right):
 8                  リターン9              のIF Bは、IS:T T Bがある場合、左右のサブツリーの決意は、Tのそれぞれ等しい
10                  リターン DFS(a.left、T)またはDFS(a.right、T)
 。11              
12である             戻り13れる         
14          リターン DFS(S、T)

コードの4、5行は、様々なサブツリーは、決意条件と略記空の場合、合理化されたコードです。

現在のツリーの同一の木Tかどうかをライン7、8、および決定

図9に示すように、コードの10行は、時間t bは第二から来る場合は再帰の実行ならば現在のツリーの実行の決意がサブツリーであるため、その後、決意を行わないことを意味し、有効にすることであるのみtは、電流がツリーTかどうかが決定されるのと同じサブツリーは、同じではありませんです。

コードの最後の12行は、Falseに直接戻ります。それはDFS(トン)であった場合でも、コードの実行時間を75%に削減されますが、私は、なぜそんなに短い理解していません。

おすすめ

転載: www.cnblogs.com/xiaohua92/p/11525521.html