节点插入二叉树C ++

时间:2015-10-30 01:28:44

标签: c++ tree

我相信我已经实现了将一个新节点插入到二进制搜索树中,但是我的测试脚本将我的树显示为有效

我的代码,如果没有当前节点,则将值插入树中。

bool InsertRecursive(BinaryTreeNode* tree_node, int value) {

 if (tree_node == NULL)
 {

BinaryTreeNode * pNode = new BinaryTreeNode;
pNode->data = value;   // inserting node in
pNode->left_child = NULL;
pNode->right_child = NULL;
tree_node = pNode ; 
return true;
 }
       if(tree_node->data == value )   // if value already exists return false
{
 return false ; 
  }
   else if (tree_node->data > value)   // traverses to find the location for the value
    return InsertRecursive(tree_node->right_child, value);
  else 
return InsertRecursive(tree_node->left_child, value);

 }

中插入节点的实际方法
 bool BinaryTree::Insert(int value) {

if (InsertRecursive(head, value)) {
return true;
} else
  return false;
}

我的测试脚本说的是什么

|测试:插入

| | - 插入' 4'

后,应该是大小为1的有效树

| | |您构建了一个无效的树。你为什么要这样对我?

| | - 插入' 2'

后,应该是大小为2的有效树

| | |您构建了一个无效的树。你的代码需要让它一起生活

| | - 插入' 3'

后,应该是大小为3的有效树

| | | 您构建了一个无效的树。还有更多的咖啡吗?

| | -Insert(1)应该返回false:[d2-1 d1-2 d2-3 d0-4 d2-5 d1-6 d2-7

] 的 | | |它返回了真实。不像老板 |失败!

所以问题应该在我实际插入节点的地方,因为树被读取为有效。我迷失了如何解决这个问题,并希望得到一些指导。

2 个答案:

答案 0 :(得分:0)

离开时," tree_node = pNode;"没什么影响。将tree_node类型更改为" BinaryTreeNode **"如果你想改变它的价值

答案 1 :(得分:0)

当head等于nullptrtree_node等于nullptr时,您必须将插入分为helper和方法。然后将您的实现添加到这两者中。

您的插入函数看起来像是在正确的轨道上,所以只需考虑辅助函数和方法中的两个函数是如何相似的。