Ich schrieb die folgende Funktion in C, die 1 zurückgibt, wenn das Element tatsächlich im Binärbaum ist und 0 andernfalls.Suche nach Element im Binärbaum, Funktion liefert immer 0
int isElementInBinaryTree(BinaryTreeNode *root, int search_item) {
if(root) {
if(search_item == root -> data) return 1;
isElementInBinaryTree(root -> left, search_item);
isElementInBinaryTree(root -> right, search_item);
}
return 0;
}
Zuerst gebe ich die Funktion zu sehen, ob die Wurzel ist, wenn es ist, ich mir die Daten an dieser Wurzel und vergleichen Sie es mit dem search_item. Wenn es wahr ist, gebe ich einfach 1 zurück und verlasse es, ansonsten fahre ich mit der Vorbestellung fort. Warum bekomme ich immer eine 0 zurück? Selbst wenn der Artikel im Binärbaum ist?
Auch die linke rekursiv Suche und dann negiert rechts vollständig den Punkt des binären Baums mit. Stattdessen sollte es eine Wahl treffen, in das linke ODER das rechte zurückzuspringen, abhängig davon, ob der aktuelle Wert größer oder kleiner ist als der, nach dem Sie suchen. – GrahamS
@GrahamS - Die Suche kann aufgrund der Suche nach einem Element in dem Knoten, der nicht in der Reihenfolge für die Konstruktion des Binärbaums verwendet wird –
sein. Das OP vergleicht die 'node-> data' mit dem' search_item' also I Ich denke, es ist sicher anzunehmen, dass der binäre Baum in Bezug auf "node-> data" sortiert ist und wenn dies nicht der Fall ist, was ist der Sinn davon, dass er ein binärer Baum ist? – GrahamS