gpt4 book ai didi

c++ - 二叉搜索树(搜索函数返回 NULL)

转载 作者:行者123 更新时间:2023-11-28 03:22:23 25 4
gpt4 key购买 nike

#include <iostream>
#include <string>
#include <fstream>
using namespace std;
template <class T>
struct TreeNode{
string value;
T key;
TreeNode<T> *Parent;
TreeNode<T> *LeftChild;
TreeNode<T> *RightChild;
TreeNode (T k,string Val)
{
this->value=Val;
this->key=k;
this->Parent=NULL;
this->LeftChild=NULL;
this->RightChild=NULL;
}
};

template <class T>
class BinaryTree{
private:
TreeNode<T> *Root;
public:
BinaryTree();
void LoadTree(const char file[]);
~BinaryTree();
void insertNode(T Key,string Val);
void deleteNode(T Key);
string searchNode(T Key);
void UpdateKey(T newkey,T oldkey);
int Height(TreeNode<T> *node);
int height();
};

template <class T>
BinaryTree<T>::BinaryTree()
{
Root=NULL;
}

template <class T>
void BinaryTree<T>::LoadTree(const char *file)
{
ifstream fin;
fin.open(file);
string buffer;
T buff;
while (!fin.eof())
{
getline(fin,buffer,'~');
fin>>buff;

TreeNode<T> *temp,*temp1;
temp=Root;
temp1=temp;
while (temp!=NULL)
{
temp1=temp;
if (temp->key>buff)
{
temp=temp->LeftChild;
}
else if (temp->key<buff)
{
temp=temp->RightChild;
}
}
temp=new TreeNode<T>(buff,buffer);
if (temp!=Root)
temp->Parent=temp1;
cout<<temp->value<<temp->key<<endl;
if (temp->LeftChild!=0)
cout<<(temp->LeftChild)->value<<endl;
}
fin.close();
}

template <class T>
string BinaryTree<T>::searchNode(T Key)
{
TreeNode<T> *temp=Root;
while (temp!=NULL)
{
if (temp->key==Key)
{
return temp->value;
}
if (temp->key>Key)
{
temp=temp->LeftChild;
}
else if (temp->key<Key)
{
temp=temp->RightChild;
}
}
return "\0";
}

上面是头文件、构造函数和函数,用于从文件构建树并在其中搜索节点。我不明白我的函数中缺少什么,因为每当我运行搜索函数时,它总是返回 NULL,这是文件/树中存在节点键时的默认条件。非常感谢大家,它现在正在工作。我真的很感激。我使用我的插入功能来构建我的树。

template <class T>
void BinaryTree<T>::insertNode(T Key,string Val)
{
TreeNode<T> **temp=&Root;
TreeNode<T> *temp1=NULL;
if (*temp==NULL)
{
Root=new TreeNode<T>(Key,Val);
return;
}
else{
while (*temp!=NULL)
{
temp1=*temp;
if (temp1->key>Key)
{
temp=&(*temp)->LeftChild;
}
else if (temp1->key<Key)
{
temp=&(*temp)->RightChild;
}
}
}
*temp=new TreeNode<T>(Key,Val);
(*temp)->Parent=temp1;
}

template <class T>
void BinaryTree<T>::LoadTree(const char *file)
{
ifstream fin;
fin.open(file);
string buffer;
T buff;
while (!fin.eof())
{
getline(fin,buffer,'~');
fin>>buff;
insertNode(buff,buffer);
}
fin.close();
}

最佳答案

您的 Root 成员永远不会被设置。因此,当您尝试搜索树时,它的值仍然是 NULLwhile 将永远不会被输入。

提示:

  1. 编写一个添加节点的方法,然后在您的 LoadTree 方法中使用它。
  2. 在上述函数中:如果还没有存储任何节点,您将把节点存储在哪里? (提示:它是您类(class)的重要成员)。

关于c++ - 二叉搜索树(搜索函数返回 NULL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15071888/

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