次のように内容は次のとおりです。
バイナリツリーを考える
root
ととリンクリストhead
の最初のノードとして。戻り値Trueの場合、リンクリスト内のすべての要素から始まる場合は
head
、一部に相当する 下向きの経路 そうでない場合はFalseを返す二項ツリーに接続されています。この文脈において下向きの経路は、いくつかのノードで始まり、下方に行くことパスを意味します。
例1:
入力:ヘッド= [4,2,8]、ルート= [1,4,4-、NULL、2,2、NULL、1、NULL、6,8、NULL、NULL、NULL、NULL、1,3] 出力:真の 説明:ブルーフォーム内のノードのバイナリツリーのサブパス。例2:
入力:ヘッド= [1,4,2,6]、ルート= [1,4,4-、NULL、2,2、NULL、1、NULL、6,8、NULL、NULL、NULL、NULL、1,3 ] 出力:真例3:
入力:ヘッド= [1,4,2,6,8]、ルート= [1,4,4-、NULL、2,2、NULL、1、NULL、6,8、NULL、NULL、NULL、NULL、1 、3] 出力:偽の 説明:からリンクされたリストのすべての要素を含むバイナリツリー内のパスがありませんhead
。制約:
1 <= node.val <= 100
リンクリストとバイナリツリー内の各ノードについて。- 与えられたリンクリストには間が含まれます
1
と100
、ノード。- 与えられたバイナリツリーは間が含まれます
1
と2500
、ノード。
ソリューションの概要:順次ツリーの各ノードは、リストの最初のノードとして使用することができるかどうかを決定します。
コードは以下の通りであります:
#一重リンクリストのための定義。 #クラスListNode(オブジェクト): # デフ__init __(自己、X): # self.val = X # self.next =なし #1 バイナリツリーノードのために定義されています。 #クラスのTreeNode(オブジェクト): # デフ__init __(自己、X): # self.val = X # self.left =なし # self.right =なし クラスソリューション(オブジェクト): RES = Falseの デフ比較(自己、tree_node、 list_node): 場合 self.resは== TRUE: 返す のelif list_node.next ==なしと list_node.val == tree_node.val: self.res = 真の リターン のelif list_node.val =!tree_node.val: リターン のelif list_node.next == なし: リターン もし!tree_node.left = なし: self.compare(tree_node.left、list_node.next) であれば tree_node.right =!なし: self.compare(tree_node.right、list_node.next) デフisSubPath(自己、頭、根 ):""」 :型ヘッド:ListNode :タイプのルート:のTreeNode :RTYPE:ブール ""」 self.res = Falseの デフ再帰(tree_node): self.compare(tree_node、ヘッド) であれば self.res == TRUE: リターン もし!tree_node.left = なし: 再帰( tree_node.left) の場合 tree_node.right =!なし: 再帰(tree_node.right) 再帰的(ルート) の戻り self.res