【解決方法】二分木にノードが存在するかどうかを確認する方法と、存在しない場合は存在しないというメッセージを出力する方法


ここに私のメインプログラムがあります

#include <stdio.h>
#include "tree.h"
#include <stdlib.h>

int menu(void);

int main (void){

What I have tried:

This program works but lets say if a tree has the nodes, 1 2 3 4 5 6 7, and the user inputs to delete the number 8, I need it to display a message saying that that number does not exist within the tree

解決策 1

ツリーはさまざまな方法でトラバースできますが、主に使用されるのは次のとおりです。 InorderPreorderPostorder.

次の手順の内訳が役立ちます。
1. ツリー トラバーサル メソッドの 1 つを使用して、現在のノードが検索しているノードと一致するかどうかを確認します。
2. 見つかった場合は、ノードを削除し、それ以上のトラバースを停止します
3. ツリーが完全にトラバースされ、一致するノードがない場合は、Node not found が表示されます。

C++
// Using preorder traversal
bool checkIfNodeExists(struct Node* node, int key)
{
    // empty node/nothing to search in
    if (node == NULL)
        return false;
    
    // node found
    if (node->data == key)
        return true;
 
    // recurrsion on left subtree 
    bool resultLeft = checkIfNodeExists(node->left, key);
    if(resultLeft) 
      return true;
 
    // recurrsion on right subtree
    bool resultRight = checkIfNodeExists(node->right, key);
    if(resultRight) 
      return true;

    // node not found
    return false;
}
見積もり:

void delete_tree(binarytree *tree, int val)

あなたの方法はあまりにも複雑に見えます。 そこから共通のロジックを抽出する必要があります。

このメソッドは、削除するために検索しているノードを checkIfNodeExists メソッドを実行し、結果に基づいて、削除またはメッセージ (見つからない場合) のアクションを実行します。 これにより、何かが欠けている可能性があり、変更を加える必要がある場所を簡単に確認できます。

コメント

タイトルとURLをコピーしました