説明:
完全なバイナリツリーは、すべてのノードがゼロまたは2つの子ノードを有するバイナリツリーとして定義されます。逆に、ある子ノードを有する完全なバイナリツリー内のどのノードが存在しません。
例えば :
バイナリツリーは、我々は、以下の例をテストする必要があります完全なバイナリツリーであるかどうかを確認するには -
バイナリツリーノードがNULLである場合は1)、それは完全なバイナリツリーです。
2)二分木のノードが空で左右のサブツリーを有する場合、それは定義により完全二分木です。
バイナリツリーノードが左右サブツリーた場合3)、それは定義により完全なバイナリツリーの一部です。左と右のサブツリーもバイナリツリーそのものであれば、この場合には再帰的に確認してください。
4)右と左サブツリーの全ての他の組み合わせでは、二分木は、完全二分木ではありません。
以下は、バイナリツリーは完全なバイナリツリーであるかどうかをチェックするための実装です。
クラスノード { int型データ、 ノードは、右から左。 ノード(INTのアイテム) { データ = 項目。 左 =右= nullを。 } } クラスBinaryTree { ノード根; / * この関数チェックバイナリツリーがいっぱいであるかどうか* / ブールisFullTree(ノードノード) { // 場合は、空のツリー 場合(ノード== NULL )を 返す 真。 //もし葉ノード の場合(node.left == nullの && node.right == nullを) 返します 真。 // 両方の左と右のサブツリーがnullでない場合は 、// インクルードが一杯になっ た場合((node.left!= nullの)&&(node.right!= nullの)) リターン(isFullTree(node.left)&& isFullTree(node.right )); // なしの作業であれば リターン はfalse ; } // ドライバプログラム パブリック 静的 ボイドメイン(文字列引数[]) { BinaryTreeツリー = 新しいBinaryTree(); tree.root = 新しいノード(10 )。 tree.root.left = 新しいノード(20 )。 tree.root.right = 新しいノード(30 )。 tree.root.left.right = 新しいノード(40 )。 tree.root.left.left = 新しいノード(50 )。 tree.root.right.left = 新しいノード(60 )。 tree.root.left.left.left = 新しいノード(80 )。 tree.root.right.right =新しいノード(70 )。 tree.root.left.left.right = 新しいノード(90 )。 tree.root.left.right.left = 新しいノード(80 )。 tree.root.left.right.right = 新しいノード(90 )。 tree.root.right.left.left = 新しいノード(80 )。 tree.root.right.left.right = 新しいノード(90 )。 tree.root.right.right.left = 新しいノード(80 )。 tree.root.right.right.right = 新しいノード(90); もし(tree.isFullTree(tree.root)) System.out.print( "バイナリツリーがいっぱいです" )。 他 System.out.print(「バイナリツリーがいっぱいではありません」); } } // このコードはMayank Jaiswalによって寄与されます