我正在尝试制作BST,需要按顺序,后序和预订打印。
我不确定如何在main()
函数中创建此树。
struct Tree_Node
{
Tree_Node *right;
Tree_Node *left;
int info;
};
class bTree
{
private:
Tree_Node *root;
public:
bTree();
void bTree::Insert(Tree_Node*& tree, int item);
void bTree::preorderPrint(Tree_Node *root);
};
bTree::bTree()
{
root = NULL;
}
void bTree::Insert(Tree_Node*& tree, int item)
{
if (tree == NULL)
{
tree = new Tree_Node;
tree->right = NULL;
tree->left = NULL;
tree->info = item;
}
else if (item < tree->info)
Insert(tree->left, item);
else
Insert(tree->right, item);
}
void bTree::preorderPrint(Tree_Node *root)
{
if ( root != NULL )
{
cout << root->info << " ";
preorderPrint( root->left );
preorderPrint( root->right );
}
}
void main()
{
// This is where I need help at
// I'm not sure how to insert a new node
bTree Test;
Test.Insert(
}
答案 0 :(得分:2)
从外观上看,你可以写
Test.Insert(Test.root, 3); // Insert 3
Test.Insert(Test.root, 4); // Insert 4
这应该有效。当然,你必须公开root。
然而,这有点尴尬,因为第一个参数将始终是bTree.root - 并且您不需要公开。请记住,您的数据类型的用户(您或其他任何人)不应该关心节点之类的内部 - 他们只关心他们的数据。相反,我建议制作一个方便Insert
方法,只需要一个整数(不是一个树节点) - 这称为重载。
void bTree::Insert(int item)
{
Insert(root, item);
}
// Keep the other insert method, but make it private.
然后你可以写:
Test.Insert(3);
Test.Insert(4);
答案 1 :(得分:1)
void bTree::Insert(int item)
{
Tree_Node * node = new Tree_Node;
node->left = NULL;
node->right = NULL;
node->info = item;
if (root == NULL)
{
root = node;
return;
}
Tree_Node * t = root;
Tree_Node * p = root;
while(1)
{
if (item < t->info)
{
t = t->left;
if(t == NULL)
{
p->left = node;
return;
}
}
else if(item > t->info)
{
t = t->right;
if(t == NULL)
{
p->right = node;
return;
}
}
else //item already exists in the tree
return;
p = t;
}
}
//now you can insert nodes like
Test.Insert(5);
Test.Insert(6);