二进制搜索树插入C ++以当前节点为根

时间:2011-10-16 22:14:04

标签: c++ recursion binary-tree insertion

我需要在只给出要添加的项目的情况下将项目添加到二叉树中。

以下是我给出的代码:

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)
    { }

    // ...

2 个答案:

答案 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.

希望这有帮助。