【发布时间】:2015-11-04 05:49:04
【问题描述】:
我相信我实现了将一个新节点插入到二叉搜索树中,但是我的测试脚本显示我的树是有效的
如果没有当前节点,我的代码将值插入到树中。
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
] | | |它返回真实。不像老板 |失败!
所以问题应该出在我实际插入节点的位置,因为树被读取为有效。然而,我不知道如何解决这个问题,希望得到一些指导。
【问题讨论】:
-
tree_node是一个局部变量。您所做的只是造成内存泄漏。 -
我觉得你遍历的方式不对..如果tree_node->data是>,则需要向左遍历(反之亦然)
-
我不明白你的意思。我建议你 1) 想想“
tree-node是一个局部变量”是什么意思,直到清楚出了什么问题,2) 在尝试树之前完美地实现一些链表。