BSTがPythonの特定のバイナリツリーに存在するかどうかを確認するプログラム
二分木が与えられたとしましょう。二分探索木(BST)であるツリーから最大のサブツリーを見つける必要があります。 BSTのルートノードを返します。
したがって、入力が次のような場合
その場合、出力は-
になります
これを解決するには、次の手順に従います-
- c:=0
- m:=null
- 関数recurse()を定義します。これはノードを取ります
- ノードがnullでない場合、
- left_val:=recurse(ノードの左側)
- right_val:=recurse(ノードの権利)
- count:=負の無限大
- if(node.leftはnullまたはnode.left.val <=node.valと同じ)および(nodeの右側はnullまたはnode.val <=node.right.valと同じ)、then
- count:=left_val + right_val + 1
- カウント>cの場合、
- c:=カウント
- m:=ノード
- 返品数
- 0を返す
- ノードがnullでない場合、
- recurse(root)
- return m
例
理解を深めるために、次の実装を見てみましょう-
class TreeNode: def __init__(self, val, left = None, right = None): self.val = val 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): if root is not None: print_tree(root.left) print(root.val, end = ', ') print_tree(root.right) def solve(root): c, m = 0, None def recurse(node): if node: nonlocal c, m left_val = recurse(node.left) right_val = recurse(node.right) count = -float("inf") if (node.left == None or node.left.val <= node.val) and (node.right == None or node.val <= node.right.val): count = left_val + right_val + 1 if count > c: c = count m = node return count return 0 recurse(root) return m tree = make_tree([1, 4, 6, 3, 5]) print_tree(solve(tree))
入力
tree = make_tree([1, 4, 6, 3, 5]) print_tree(solve(tree))
出力
3, 4, 5,
-
Pythonでツリーの左端の最深ノードを見つけるプログラム
二分木があるとしましょう。最も深いノードの値を見つける必要があります。最も深いノードが複数ある場合は、左端の最も深いノードを返します。 したがって、入力が次のような場合 4と7が最も深いが、4が最も残っているため、出力は4になります。 これを解決するには、次の手順に従います- queue:=1つのノードルートを持つキュー。 left_max:=ルートの値 キューのサイズが0より大きい場合は、実行してください level_size:=キューのサイズ 0からlevel_sizeの範囲のiの場合、実行 temp:=キューの最初の要素を削除します
-
Pythonの二分木でk長のパスを見つけるプログラム
一意の値を含む二分木があり、別の値kもあるとすると、ツリー内のkの長さの一意のパスの数を見つける必要があります。パスは、親から子へ、または子から親へのいずれかになります。一部のノードが一方のパスに表示され、もう一方のパスには表示されない場合、2つのパスは異なると見なされます。 したがって、入力が次のような場合 k =3の場合、パスは[12,8,3]、[12,8,10]、[8,12,15]、[3,8,10]であるため、出力は4になります。 これを解決するために、次の手順に従います- 関数dfs()を定義します。これはノードを取ります ノードがnullの場合、 1とk