【问题标题】:Node insertion binary tree C++节点插入二叉树 C++
【发布时间】: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) 在尝试树之前完美地实现一些链表。

标签: c++ tree


【解决方案1】:

离开函数时,"tree_node = pNode ;"没有任何影响。如果要更改它的值,请将 tree_node 类型更改为“BinaryTreeNode**”

【讨论】:

    【解决方案2】:

    对于head等于nullptrtree_node等于nullptr的每种情况,您必须将插入拆分为帮助程序和方法。然后将您的实现添加到这两个中。

    您的插入函数看起来是在正确的轨道上,所以请考虑一下帮助程序和方法中的两个函数是如何相似的。

    【讨论】:

    • 并且请注意,如果您编写 BinaryTreeNode* pNode = new BinaryTreeNode,则会出现段错误。将其更改为 BinaryTreeNode* pNode = new BinaryTreeNode{0}。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    相关资源
    最近更新 更多