Data structures 用于删除二叉树中不工作的节点的代码
我编写了这段代码来删除二叉树中的一个节点,并将其替换为最右边最深的节点。 但删除后是行为不端。请在我的代码中提出问题。提前感谢你 我正在创建一个队列以查找最深的节点。 Delete关键字用于删除 最后一行“打印”未正确执行。 **Data structures 用于删除二叉树中不工作的节点的代码,data-structures,binary-tree,Data Structures,Binary Tree,我编写了这段代码来删除二叉树中的一个节点,并将其替换为最右边最深的节点。 但删除后是行为不端。请在我的代码中提出问题。提前感谢你 我正在创建一个队列以查找最深的节点。 Delete关键字用于删除 最后一行“打印”未正确执行。 ** #包括 使用名称空间std; 结构节点{ int数据; 结构节点*左; 结构节点*右; 节点(int-val){ 数据=val; 左=空; 右=空; } }; void printbst(节点*根){ if(root==NULL) 返回; printbst(根->左)
#包括
使用名称空间std;
结构节点{
int数据;
结构节点*左;
结构节点*右;
节点(int-val){
数据=val;
左=空;
右=空;
}
};
void printbst(节点*根){
if(root==NULL)
返回;
printbst(根->左);
coutright==NULL)
{
如果(根->数据==键)
返回NULL;
其他的
返回根;
}
而(!q.empty()){
温度=q.前();
q、 pop();
如果(临时->数据==键)
keynode=temp;
如果(临时->左){
q、 按下(温度->左);
}
如果(临时->右侧){
q、 按下(温度->右侧);
}
}
键节点->数据=临时->数据;
删除(临时);
返回根;
}
int main(){
结构节点*根=新节点(1);
根->左=新节点(2);
根->右=新节点(3);
根->左->左=新节点(4);
根->左->右=新节点(5);
根->右->左=新节点(6);
根->右->右=新节点(7);
printbst(root);
库特
#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;
}