struct node {
int data;
struct node *left; /* left tree part */
struct node *right; /* right tree part */
};
bool search(struct node *root, int element) {
if ( root -> data == element) {
return true;
}
if (root->data < element) {
search (root->right, element);
}
if (root->data > element) {
search(root->left, element);
}
return false;
}
如果在二叉搜索樹中找到給定元素,我希望該程式回傳 true。否則回傳假。這個遞回行程有什么問題?
uj5u.com熱心網友回復:
這個遞回行程有什么問題?
正如評論中提到的,你沒有對這個函式中的遞回呼叫的結果做任何事情。你想像這樣回傳它們:
if (root->data < element) {
return search(root->right, element);
}
if (root->data > element) {
return search(root->left, element);
}
一旦達到終止遞回呼叫的條件,您就會看到是否找到了該元素。
bool search(struct node *root, int element) {
// element is not found
if(!root) return false;
// element is found
if (root->data == element) {
return true; // terminate recursive calls
}
if (root->data < element) {
return search(root->right, element);
}
if (root->data > element) {
return search(root->left, element);
}
}
編輯:小心,不像我,一定要檢查 root 是否為空;)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/348668.html
