与えられた二分木の垂直レベルがPythonでソートされているかどうかを確認します
したがって、入力がl =-1
のような場合
レベル-1の要素は3.7であり、ソートされているため、出力はTrueになります。
これを解決するには、次の手順に従います-
-
ルートがnullの場合、
-
Trueを返す
-
-
previous_value:=-inf
-
current_level:=0
-
current_node:=値が0の新しいツリーノード
-
qという名前の1つのデキューを定義します
-
qの最後に(root、0)を挿入します
-
qが空でない間、実行します
-
current_node:=q [0、0]
-
current_level:=q [0、1]
-
qの左側から要素を削除
-
current_levelがlevelと同じ場合、
-
previous_value <=current_node.valの場合、
-
previous_value:=current_node.val
-
-
それ以外の場合
-
Falseを返す
-
-
-
current_node.leftがnullでない場合、
-
qの最後に(current_node.left、current_level-1)を挿入します
-
-
current_node.rightがnull以外の場合、
-
qの最後に(current_node.right、current_level + 1)を挿入します
-
-
-
Trueを返す
例
理解を深めるために、次の実装を見てみましょう-
from collections import deque from sys import maxsize INT_MIN = -maxsize class TreeNode: def __init__(self, key): self.val = key self.left = None self.right = None def are_elements_sorted(root, level): if root is None: return True previous_value = INT_MIN current_level = 0 current_node = TreeNode(0) q = deque() q.append((root, 0)) while q: current_node = q[0][0] current_level = q[0][1] q.popleft() if current_level == level: if previous_value <= current_node.val: previous_value = current_node.val else: return False if current_node.left: q.append((current_node.left, current_level - 1)) if current_node.right: q.append((current_node.right, current_level + 1)) return True root = TreeNode(2) root.left = TreeNode(3) root.right = TreeNode(6) root.left.left = TreeNode(8) root.left.right = TreeNode(5) root.left.right.left = TreeNode(7) level = -1 print(are_elements_sorted(root, level))
入力
root = TreeNode(2) root.left = TreeNode(3) root.right = TreeNode(6) root.left.left = TreeNode(8) root.left.right = TreeNode(5) root.left.right.left = TreeNode(7)
出力
True
-
Pythonで二分木を反転する
二分木があるとします。私たちの仕事は、逆二分木を作成することです。したがって、ツリーが以下のようになっている場合- 反転したツリーは次のようになります これを解決するために、再帰的アプローチを使用します ルートがnullの場合は、戻ります 左右のポインタを入れ替える 左のサブツリーと右のサブツリーを再帰的に解決します 例(Python) 理解を深めるために、次の実装を見てみましょう- class TreeNode: def __init__(self, data, left = None, right = None):
-
ソートされた配列をPythonでバイナリ検索ツリーに変換する
ソートされた配列Aが1つあるとします。高さのバランスが取れた2分探索を1つ生成する必要があります。この問題では、高さのバランスが取れた二分木は、実際には、すべてのノードの2つのサブツリーの深さが1を超えて異ならない二分木です。配列が[-10、-3、0、5、9のようであるとします。 ]。したがって、考えられる出力の1つは、[0、-3、9、-10、null、5]のようになります。 これを解決するために、次の手順に従います。 Aが空の場合は、Nullを返します 中間要素を見つけて、ルートにします 配列を2つのサブ配列、中央要素の左側と中央要素の右側に分割します 左側のサブアレイと右側のサ