微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

删除二叉树中节点的代码不起作用

如何解决删除二叉树中节点的代码不起作用

我编写了这段代码删除二叉树中的一个节点并将其替换为最深的最右边的节点。 但是删除后就报错了。请在我的代码中提出问题。感谢您的期待。

我正在创建一个队列来查找最深的节点。 delete关键字用于删除

最后一行“打印”没有被正确执行。 **

#include<bits/stdc++.h>
using namespace std;

struct Node{
    int data;
    
    struct Node* left;
    struct Node* right;
    
    Node(int val){
        data=val;
        left=NULL;
        right=NULL;
    }
};

void printbst(Node *root){
    if(root==NULL)
    return;
    printbst(root->left);
    cout<<root->data<<" ";
    printbst(root->right);
}

Node* lastnode(Node *root,int key){
    queue<Node *>q;
    Node *temp;
    Node *keynode;
    q.push(root);
    temp=q.front();
    
    if(temp->left==NULL && temp->right==NULL)
        {
            if(root->data==key)
            return NULL;
            else
            return root;
        }
        
    while(!q.empty()){
        
    temp=q.front();
        q.pop();
        if(temp->data==key)
        keynode=temp;
        
        if(temp->left){
            q.push(temp->left);
        }
        if(temp->right){
            q.push(temp->right);
        }
    }
    
    keynode->data=temp->data;
    
    delete(temp);
    return root;
}

int main(){
    
    struct Node* root=new Node(1);
    
    root->left=new Node(2);
    root->right=new Node(3);
    root->left->left=new Node(4);
    root->left->right=new Node(5);
    root->right->left=new Node(6);
    root->right->right=new Node(7);
    
    printbst(root);
    cout<<"\n"<<"printed"<<"\n";
    int key=3;
    
    root=lastnode(root,key);
    
    printbst(root);
    cout<<"\n"<<"printed"<<"\n";
    
    return 0;
}

**

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。