我正在制作一个AVL树程序,我的左右变量都有错误

I am making an AVL tree program and I am getting errors with my left and right variables

本文关键字:程序 我的 左右 有错误 变量 AVL 一个      更新时间:2024-09-28

我从以前的一个程序中提取了这段代码,当时我使用AVL Trees而不使用结构。我认为问题是在使用getLeft((和getRight((时如何使用结构。

#ifndef BINARYTREE_H
#define BINARYTREE_H
#include <iostream>
using namespace std;

class BinaryTree
{
private:
struct TreeNode
{
string name;
int krabbyPatty;
TreeNode* left;
TreeNode* right;
};

TreeNode* root;

// Private member functions
void insert(TreeNode *&, TreeNode *&);
void destroySubTree(TreeNode *);
//void deleteNode(string n, TreeNode *&);
//void makeDeletion(TreeNode *&);
void displayInOrder(TreeNode *) const;
void display(TreeNode *ptr, int level);
void getTotal(TreeNode *nodePtr, int &total);
void getMost(TreeNode *nodePtr, string& n, int& mostPatties);
void getLeast(TreeNode *nodePtr, string& n, int& leastPatties);

我在这里得到了错误,说表达式必须是一个可修改的左值和右值。

public:
// Constructor
BinaryTree()
{ 
root = NULL; 
left = NULL;
right = NULL;
}
// Destructor
~BinaryTree()
{ 
destroySubTree(root); 
}
// Binary tree operations
void insertNode(string, int);
int searchNode(string);
//void remove(string);
void displayInOrder() const
{  
displayInOrder(root); 
}

void getLeastNumPatties(string&, int&);
void getMostNumPatties(string&, int&);
int getTotalNumPatties();
void displayTree();

其他错误就在这里,我认为我处理的结构是错误的。

TreeNode* getLeft()
{
return left;
}
TreeNode* getRight()
{
return right;
}
void setLeft(TreeNode* nodePtr)
{
left = nodePtr;
}
void setRight(TreeNode* nodePtr)
{
right = nodePtr;
}
};
#endif

欢迎来到新级别的

**程序复杂性增加一**

现在,您必须将代码拆分为TreeNode和BinaryTree这两个单独的关注点,那么用户调用setLeft有意义吗?BinaryTree应该这样做吗?谁应该真正调用Tree或Node?您提供的代码应该是TreeNode的成员,因为它没有父节点和新节点这两个指针。

void TreeNode::setLeft(TreeNode* nodePtr) {
left = nodePtr;
}

所以现在这应该工作

auto rl_rotation(TreeNode *parent) {    
TreeNode *temp;     
temp = parent->getRight();     
parent->setRight(r_rotation(temp));     
return l_rotation(parent); 
}