我需要在只给出要添加的项目的情况下将项目添加到二叉树中。
以下是我给出的代码:
void BinaryTree::add(Data * data) {
if (root == NULL) {
root = new BinaryTreeNode(data);
}
else {
root->add(data);
}
}
其中root
是定义为BinaryTree
的{{1}}的私有变量。
我需要实现一个方法:
BinaryTreeNode
其中void BinaryTreeNode::add(Data * data);
是:
BinaryTreeNode
我想以递归方式执行此操作,但是当您仅传递要添加的数据时,我并不乐观。
我认为不起作用的是:
class BinaryTreeNode {
public:
Data * nodeData;
BinaryTreeNode * left;
BinaryTreeNode * right;
/**
* Constructor
*/
BinaryTreeNode(
Data * data,
BinaryTreeNode * left = NULL,
BinaryTreeNode *right = NULL
)
: nodeData(data), left(left), right(right)
{ }
// ...
答案 0 :(得分:2)
您正在为此设置临时值,然后将其与NULL进行比较。这永远不应该是NULL。您需要检查左侧和右侧是否为NULL。
答案 1 :(得分:0)
一个二叉树,至少我知道如何实现如下所示涉及两个对象,一个包含treenode对象,另一个作为整个树的接口。
class cBinaryTree {
public:
bool insert(int inData);
//Other operations
private:
cBinaryTreeNode* root;
bool leftInsertion;
cBinaryTreeNode* getRoot() { return root; }
当您比较输入数据的实际值并相应地放置它时,这有资格作为二叉搜索树。然后插入函数可以写为
bool cBinaryTree::insert(int inData) {
//handle case if its first node.
cBinaryTreeNode *Parent = getInsertionNodePosition(getRoot(), inData);
cBinaryTreeNode *newNode = createNewNode(inData);
if(leftInsertion) //insert into left. add return statement
Parent->setLeftChild() = newNode;
else //insert into right
}
递归查找函数将类似于
cBinaryTreeNode* getInsertionNodePosition(cBinaryTreeNode* node,int inData) {
//Check left subtree and proceed from there.
if(inData < node->getData()) {
if(node->getLeftChild() == NULL) {
leftInsertion = true;
return node;
}
else {
node = node->getLeftChild();
return getInsertionNodePosition(node, inData);
}
}
//Similarly Check right subtree.
希望这有帮助。