Python
 Computer >> コンピューター >  >> プログラミング >> Python

与えられた二分木の垂直レベルがPythonでソートされているかどうかを確認します


二分木があるとします。二分木の与えられた垂直レベルがソートされているかどうかをチェックする必要があります。 2つのノードがオーバーラップしている場合は、それらが属するレベルでソートされた順序になっていることを確認してください。

したがって、入力がl =-1

のような場合

与えられた二分木の垂直レベルがPythonでソートされているかどうかを確認します

レベル-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

  1. Pythonで二分木を反転する

    二分木があるとします。私たちの仕事は、逆二分木を作成することです。したがって、ツリーが以下のようになっている場合- 反転したツリーは次のようになります これを解決するために、再帰的アプローチを使用します ルートがnullの場合は、戻ります 左右のポインタを入れ替える 左のサブツリーと右のサブツリーを再帰的に解決します 例(Python) 理解を深めるために、次の実装を見てみましょう- class TreeNode:    def __init__(self, data, left = None, right = None):    

  2. ソートされた配列をPythonでバイナリ検索ツリーに変換する

    ソートされた配列Aが1つあるとします。高さのバランスが取れた2分探索を1つ生成する必要があります。この問題では、高さのバランスが取れた二分木は、実際には、すべてのノードの2つのサブツリーの深さが1を超えて異ならない二分木です。配列が[-10、-3、0、5、9のようであるとします。 ]。したがって、考えられる出力の1つは、[0、-3、9、-10、null、5]のようになります。 これを解決するために、次の手順に従います。 Aが空の場合は、Nullを返します 中間要素を見つけて、ルートにします 配列を2つのサブ配列、中央要素の左側と中央要素の右側に分割します 左側のサブアレイと右側のサ