c++ - 二进制搜索树中的递归堆栈

标签 c++ binary-search-tree

我正在尝试从二进制搜索树中删除节点。尽管此函数正常工作,为什么我们需要设置node-> m_left或node-> m_right来返回deletenode函数本身的值?很难理解这种递归结构。
当前仅对叶节点执行此操作

Node<T>*  deletenode(T key){
         return deletenode(key,this->root);
        }
        Node<T>*  deletenode(T key,Node<T>* node){
            Node<T>* temp;
         if(node==nullptr){
             return node;
         }
         if(key<node->m_data){
             node->m_left=deletenode(key,node->m_left);
         }
         if(key>node->m_data){
             node->m_right=deletenode(key,node->m_right);
         }
          
         

         return temp;
        }
        
        

最佳答案

您将向左或向右设置该分支上调用deletenode函数的结果,而不是函数本身。
递归的意思是:“如果我的树有一个左分支和一个右分支,并且要删除的项目在左分支中,则制作一个具有相同右分支的新树,但是删除要删除的项目的结果左分支为其左分支”

关于c++ - 二进制搜索树中的递归堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63035767/

相关文章:

java - 遍历节点类被另一个类继承的树

java - 具有给定总和的二叉树中的路径数

c++ - 无法在 C++ 代码块中构建和运行

c++ - Opengl 中飘扬的旗帜效果 (C++)

c++ - 大尺寸图标文件在Qt中占用大内存吗?

algorithm - 二叉搜索树 (BST) 的最大子树

java - 我将如何搜索二叉树以找到目标?

java - 尝试使用 getInorderIterator 但它不打印我的树 InOrder

C++ GUI按钮卡在底部

c++ - 关于 C++ (UNIX) 中的套接字连接超时