Pythonの特定のツリーから最大の二分探索サブツリーを見つけるプログラム
二分木があるとすると、二分探索木として最大のサブツリー(ノード数が最大)を見つける必要があります。
したがって、入力が次のような場合
その場合、出力は次のようになります
これを解決するには、次の手順に従います-
- max_size:=[0]
- max_node:=[null]
- 関数traverse()を定義します。これはノードを取ります
- ノードがnullの場合、
- nullを返す
- 左:=トラバース(ノードの左)
- right:=traverse(ノードの右側)
- lst:=左+[ノードの値]+右
- lstがソートされている場合、
- max_size [0]
- max_size [0]:=lstのサイズ
- max_node [0]:=ノード
- max_size [0]
例(Python)
理解を深めるために、次の実装を見てみましょう-
class TreeNode: def __init__(self, data, left = None, right = None): self.val = data self.left = left self.right = right def print_tree(root): if root is not None: print_tree(root.left) print(root.val, end = ', ') print_tree(root.right) class Solution: def solve(self, root): max_size = [0] max_node = [None] def traverse(node): if not node: return [] left = traverse(node.left) right = traverse(node.right) lst = left + [node.val] + right if sorted(lst) == lst: if max_size[0] < len(lst): max_size[0] = len(lst) max_node[0] = node return lst traverse(root) return max_node[0] ob = Solution() root = TreeNode(12) root.left = TreeNode(3) root.right = TreeNode(5) root.right.left = TreeNode(4) root.right.right = TreeNode(6) print_tree(ob.solve(root))
入力
root = TreeNode(12) root.left = TreeNode(3) root.right = TreeNode(5) root.right.left = TreeNode(4) root.right.right = TreeNode(6)
出力
4, 5, 6,
-
与えられた二分木の垂直レベルがPythonでソートされているかどうかを確認します
二分木があるとします。二分木の与えられた垂直レベルがソートされているかどうかをチェックする必要があります。 2つのノードがオーバーラップしている場合は、それらが属するレベルでソートされた順序になっていることを確認してください。 したがって、入力がl =-1のような場合 レベル-1の要素は3.7であり、ソートされているため、出力はTrueになります。 これを解決するには、次の手順に従います- ルートがnullの場合、 Trueを返す previous_value:=-inf current_level:=0 current_node:=値が0の新
-
Pythonで特定の二分木で最大の完全なサブツリーを見つける
特定の二分木があるとします。与えられた二分木で最大のパーフェクトサブツリーのサイズを見つける必要があります。私たちが知っているように、完全な二分木は、すべての内部ノードに2つの子があり、すべての葉が同じレベルにある二分木です。 したがって、入力が次のような場合 その場合、出力は3になり、サブツリーは これを解決するには、次の手順に従います- RetTypeと呼ばれる1つのブロックを定義します。これは、isPerfect、height、rootTreeを保持し、最初はすべて0です get_prefect_subtree()という関数を定義します。これはルートを取りま