Node* insert(Node* node,Key key,Value value)函数的子节点赋值

来源:5-2 二分搜索树基础 (Binary Search Tree)

SD_Kaden

2018-09-01

http://img.mukewang.com/szimg/5b8a14f40001e4aa16370371.jpg

http://img.mukewang.com/szimg/5b8a14f400012fa412390647.jpg


写回答

1回答

liuyubobobo

2018-09-01

由于你没有将返回值赋值给树,所以新创建的节点没有和原本的二叉树建立起联系。其实就是,新建立的节点并没有添加给二叉树:)


请参考课程的官方代码:https://github.com/liuyubobobo/Play-with-Algorithms/blob/master/05-Binary-Search-Tree/Course%20Code%20(C%2B%2B)/03-Binary-Search-Tree-Insert/main.cpp

// 向以node为根的二分搜索树中, 插入节点(key, value), 使用递归算法    
// 返回插入新节点后的二分搜索树的根    
Node* insert(Node *node, Key key, Value value){    
    if( node == NULL ){    
        count ++;    
        return new Node(key, value);    
    }    
    
    if( key == node->key )    
        node->value = value;    
    else if( key < node->key )    
        // 注意:insert的结果必须赋值给node->left,
        // 才能将新添加的节点挂接到二叉树上
        node->left = insert( node->left , key, value);    
    else    // key > node->key  
        // 同理:insert的结果必须赋值给node->right,
        // 才能将新添加的节点挂接到二叉树上  
        node->right = insert( node->right, key, value);    

    return node;    
}


这个课程的所有代码都可以通过课程官方github获得。遇到按照视频尝试编写代码却出现错误,自己也调试不好的情况,可以尝试在你的环境下运行课程的官方代码看是否有同样的问题。如果没有问题,可以仔细和课程的官方代码进行调试比对,看看自己的代码哪里有问题:)


课程官方代码传送门:https://github.com/liuyubobobo/Play-with-Algorithms 


加油!:)


2
1
SD_Kaden
非常感谢!
2018-09-02
共1条回复

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11187 学习 · 1614 问题

查看课程