Pythonを使用して親ポインターを使用して、バイナリツリーの最も低い共通の祖先を見つけるプログラム
二分木と2つの特定のノードxとyが与えられたとします。二分木から2つのノードの最も低い共通の祖先を見つける必要があります。二分木の最も低い共通の祖先は、ノードxとyの両方が子孫である最も低いノードです。特定のノードは、それ自体の子孫になることもできます。ノードを見つけて出力として返す必要があります。
ツリーのノード構造は次のようになります-
TreeNode: data: <integer> left: <pointer of TreeNode> right: <pointer of TreeNode> parent: <pointer of TreeNode>
解決策を見つける際には、親ポインタを利用する必要があります。
したがって、入力が次のような場合
およびx=3、y =7;その場合、出力は5になります。
3と7はどちらも5の子孫なので、答えは5になります。
これを解決するには、次の手順に従います-
-
path_p_r:=新しいリスト
-
xがnullでない場合は、実行してください
-
path_p_r
の最後にxを挿入します -
x:=xの親
-
-
yがnullでない場合は、実行してください
-
yがpath_p_rに存在する場合、
-
yを返す
-
-
y:=yの親
-
理解を深めるために、次の実装を見てみましょう-
例
class TreeNode: def __init__(self, data, left = None, right = None, parent = None): self.data = data self.left = left self.right = right self.parent = parent 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, parent=temp) else: temp.left = TreeNode(0,parent=temp) break else: que.append(temp.left) if (not temp.right): if data is not None: temp.right = TreeNode(data,parent=temp) else: temp.right = TreeNode(0,parent=temp) 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 search_node(root, element): if (root == None): return None if (root.data == element): return root res1 = search_node(root.left, element) if res1: return res1 res2 = search_node(root.right, element) return res2 def solve(x, y): path_p_r = [] while x: path_p_r.append(x) x = x.parent while y: if y in path_p_r: return y y = y.parent root = make_tree([5, 3, 7, 2, 4, 1, 7, 6, 8, 10]) print(solve(search_node(root, 3), search_node(root, 7)).data)
入力
[5, 3, 7, 2, 4, 1, 7, 6, 8, 10], 3, 7
出力
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を使用し