Pythonで最も深い葉の最も低い共通の祖先
ルート化された二分木があるとすると、最も深い葉の最も低い共通の祖先を返す必要があります。そのことを覚えておく必要があります-
-
二分木のノードは、子がない場合にのみリーフノードになります
-
ツリーのルートの深さは0であり、ノードの深さがdの場合、その各子の深さはd+1です。
-
SのすべてのノードがルートAのサブツリーにあるように、最大の深さを持つノードAのノードのセットSの最小の共通祖先。
入力が[1,2,3,4,5]の場合、
その場合、出力は[2,4,5]
になります。これを解決するには、次の手順に従います-
-
solve()と呼ばれるメソッドを定義します。これはノードを取ります。これは次のように機能します-
-
ノードが存在しない場合は、[0、None]
のリストを返します -
左右のサブツリーにノードがない場合は、[1、None]
のリストを返します。 -
d1、l:=solve(ノードの左側)、d2、r:=solve(ノードの右側)
-
d1> d2の場合、値[d1 + 1、l]
のリストを返します。 -
それ以外の場合、d2> d1の場合、値[d2 + 1、r]
のリストを返します。 -
値[d1+1、ノード]
のリストを返します -
mainメソッドでは、-
を実行します。 -
リスト:=Solve(root)
-
リターンリスト[1]
理解を深めるために、次の実装を見てみましょう-
class TreeNode: def __init__(self, data, left = None, right = None): self.data = data self.left = left self.right = right def insert(temp,data): que = [] que.append(temp) while (len(que)): temp = que[0] que.pop(0) if (not temp.left): if data is not None: temp.left = TreeNode(data) else: temp.left = TreeNode(0) break else: que.append(temp.left) if (not temp.right): if data is not None: temp.right = TreeNode(data) else: temp.right = TreeNode(0) break else: que.append(temp.right) def make_tree(elements): Tree = TreeNode(elements[0]) for element in elements[1:]: insert(Tree, element) return Tree def print_tree(root): #print using inorder traversal if root is not None: print_tree(root.left) print(root.data, end = ', ') print_tree(root.right) class Solution(object): def lcaDeepestLeaves(self, root): return self.solve(root)[1] def solve(self,node): if not node: return [0,None] if not node.left and not node.right: return [1,node] d1,l = self.solve(node.left) d2,r = self.solve(node.right) if d1>d2: return [d1+1,l] elif d2>d1: return [d2+1,r] return [d1+1,node] ob = Solution() root = make_tree([1,2,3,4,5]) print_tree(ob.lcaDeepestLeaves(root))
入力
[1,2,3,4,5]
出力
4, 2, 5,
-
Pythonのバイナリツリーの最も低い共通の祖先
二分木があるとします。与えられた2つのノードの中で最も低い共通の祖先ノードを見つける必要があります。 2つのノードpとqのLCAは、実際には、pとqの両方を子孫として持つツリーの最下位ノードです。したがって、二分木が[3,5,1,6,2,0,8、null、null、7,4]のような場合。ツリーは次のようになります- ここで、5と1のLCAは3です これを解決するには、次の手順に従います- ツリーが空の場合は、nullを返します pとqの両方がrootと同じ場合は、rootを返します left:=pとqを使用したルートの左側のサブツリーのLCA right:=pとqを使用したル
-
Pythonのバイナリ検索ツリーの最も低い共通の祖先
二分探索木があるとします。与えられた2つのノードの中で最も低い共通の祖先ノードを見つける必要があります。 2つのノードpとqのLCAは、実際には、pとqの両方を子孫として持つツリーの最下位ノードです。したがって、二分木が[6、2、8、0、4、7、9、null、null、3、5]のような場合。ツリーは次のようになります- ここで、2と8のLCAは6です これを解決するには、次の手順に従います- ツリーが空の場合は、nullを返します pとqの両方がrootと同じ場合は、rootを返します left:=pとqを使用したルートの左側のサブツリーのLCA right:=pとqを使用し