gpt4 book ai didi

c++ - 无法在二叉树中实现递归搜索

转载 作者:太空宇宙 更新时间:2023-11-04 15:49:28 26 4
gpt4 key购买 nike

这是我的代码:

  template <typename DataType> bool SearchValue(TreeNode<DataType> *root, DataType search_value)
{
if(search_value != root->data)
{
if(root->right != NULL)
{
return SearchValue(root->right, search_value);
}
if (root->left != NULL)
{
return SearchValue(root->left, search_value);
}
return false;
}
else
{
return true;
}
}

我无法使 SearchValue 函数正常工作。条件是不改变SearchValue 函数的签名。问题如下:例如,我们试图找到数据字段等于“90”的元素并且它存在于树中。有时此代码会找到此元素,有时不会 - 取决于它在树中的位置。问题是如何让它每次都能正常工作。

我以这种方式构建树:

template <typename DataType> TreeNode<DataType> *BuildTree()
{
TreeNode<DataType> *root = new TreeNode<DataType>(10, new TreeNode<DataType>(20), new TreeNode<DataType>(30));

TreeNode<DataType> *curRoot = root;
curRoot = curRoot->left;
curRoot->left = new TreeNode<DataType>(40);
curRoot->left->left = new TreeNode<DataType>(70);
curRoot->right = new TreeNode<DataType>(50);
curRoot = curRoot->right;
curRoot->left = new TreeNode<DataType>(80, new TreeNode<DataType>(100), new TreeNode<DataType>(110));
curRoot = root->right;
curRoot->left = new TreeNode<DataType>(60);
curRoot = curRoot->left;
curRoot->right = new TreeNode<DataType>(90, new TreeNode<DataType>(120), new TreeNode<DataType>(130));

return root;
}

我这样测试搜索:

TreeNode<int> *treeRoot = BuildTree<int>();
int valueToFind = treeRoot->data;
cout << "Enter the value you'd like to find in the tree: ";
cin >> valueToFind;
cin.get();
if(SearchValue(treeRoot, valueToFind) == true)
{
cout << "Value " << valueToFind << " was found!";
}

我实现树的方式:

template <typename DataType> struct TreeNode
{
TreeNode(DataType val, TreeNode<DataType> *leftPtr = NULL, TreeNode<DataType> *rightPtr = NULL)
{
left = leftPtr;
right = rightPtr;
data = val;
}
TreeNode<DataType> *left, *right;
DataType data;
};

最佳答案

如果右分支存在,则当前搜索将始终遵循右分支(然后永远不会遵循左分支)。如果数据在树中排序(这是典型的),代码应检查根节点以决定是向左遍历还是向右遍历。

关于c++ - 无法在二叉树中实现递归搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10870758/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com