所以我尝试在我的二叉树中找到最大的数字,这样我就可以删除它,但它不会运行,插入我搜索最大数字的部分,树工作正常,没有这部分。
以下是我现在获得的代码:
#include <iostream>
#include <string>
using namespace std;
template<class T>
class BinaryTree
{
struct Node
{
T data;
Node* lChildptr;
Node* rChildptr;
Node(T dataNew)
{
data = dataNew;
lChildptr = NULL;
rChildptr = NULL;
}
};
private:
Node* root;
void Insert(T newData, Node* &theRoot)
{
if(theRoot == NULL)
{
theRoot = new Node(newData);
return;
}
if(newData < theRoot->data)
Insert(newData, theRoot->lChildptr);
else
Insert(newData, theRoot->rChildptr);;
}
void PrintTree(Node* theRoot)
{
if(theRoot != NULL)
{
PrintTree(theRoot->lChildptr);
cout<< theRoot->data<<" \n";;
PrintTree(theRoot->rChildptr);
}
}
void Largest( Node* theRoot, T max)
{
if ( theRoot == null )
return -1;
int left = Largest(theRoot->lChildptr);
int right = Largest ( theRoot->rChildptr);
if( theRoot->data > left && theRoot->data > right )
return theRoot->data;
else
return max ( left, right );
};
public:
BinaryTree()
{
root = NULL;
}
void AddItem(T newData)
{
Insert(newData, root);
}
void PrintTree()
{
PrintTree(root);
}
void Largest()
{
Largest(root);
}
};
int main()
{
BinaryTree<int> *myBT = new BinaryTree<int>();
myBT->AddItem(2);
myBT->AddItem(5);
myBT->AddItem(1);
myBT->AddItem(10);
myBT->AddItem(8);
myBT->PrintTree();
myBT->Largest();
}
答案 0 :(得分:1)
树中最大的数字将是树中最右边的节点。所以继续往下走,直到你再也不能。
//删除了代码,因为这可能是一个家庭作业问题
答案 1 :(得分:0)
答案 2 :(得分:0)
由于二叉搜索树表示左子节点小于节点,因此右子节点大于或等于节点。
我认为你只需要找到最合适的孩子来找到最大的节点。
无论如何,你有2个版本BinaryTree :: Largest,一个带0个参数,一个带2个参数。
在void BinaryTree :: Largest()中,你调用Largest(root),但是没有Largest只接受一个参数。也许您打算传递一个模板对象?
我看到的另一个问题是另一个Largest函数返回void而不是一个数字,并使用模板对象(max),就像它不是一个函数一样(在你的例子中它是一个int)。稍后返回模板,当函数声明它返回void时。
我建议您更改Largest以返回模板而不是void。
T Largest( Node* theRoot)//<-- Notice returning of the template, not void
{
if ( theRoot == null )
return -1;
T left = Largest(theRoot->lChildptr);
T right = Largest ( theRoot->rChildptr);
if( theRoot->data > left && theRoot->data > right )
return theRoot->data;
else if (left < right)//<-- max was not a function, manual compare
return right;
else
return left;
}//<--You were missing a "}" here too
//...
T Largest()
{
return Largest(root);
}