在 C++ 中删除值为 x 的叶子节点?
让我们首先定义一个结构体,它将表示一个树节点,其中包含数据及其左右子节点。如果这是第一个创建的节点,那么它就是根节点,否则就是子节点。
struct Node {
int data;
struct Node *leftChild, *rightChild;
};接下来,我们创建我们的 newNode(int data) 函数,该函数接受一个 int 值并将其分配给节点的数据成员。该函数返回指向已创建的 struct Node 的指针。此外,新创建节点的左右子节点都设置为 null。
struct Node* newNode(int data){
struct Node* newNode = new Node;
newNode->data = data;
newNode->leftChild = newNode->rightChild = NULL;
return (newNode);
}现在,我们创建我们的 deleteNode(Node* root, int x) 函数,该函数接受根节点和要删除的节点的数据值。如果给定节点是父节点,则它还会删除其左右子节点。该函数在删除给定节点后返回修改后的根节点。
Node* deleteLeafNode(Node* root, int x){
if (root == NULL)
return nullptr;
root->leftChild = deleteLeafNode(root->leftChild, x);
root->rightChild = deleteLeafNode(root->rightChild, x);
if (root->data == x && root->leftChild == NULL && root->rightChild == NULL)
return nullptr;
return root;
}最后,为了在删除后显示树,我们有一个函数 inorder(Node* root),它以中序方式遍历树。
void inorder(Node* root){
if (root != NULL){
inorder(root->leftChild);
inorder(root->rightChild);
cout << root->data << " ";
}
}示例
让我们看看以下删除值为 x 的叶子节点的实现
#include <iostream>
using namespace std;
struct Node {
int data;
struct Node *leftChild, *rightChild;
};
struct Node* newNode(int data){
struct Node* newNode = new Node;
newNode->data = data;
newNode->leftChild = newNode->rightChild = NULL;
return (newNode);
}
Node* deleteNode(Node* root, int x){
if (root == NULL)
return nullptr;
root->leftChild = deleteNode(root->leftChild, x);
root->rightChild = deleteNode(root->rightChild, x);
if (root->data == x && root->leftChild == NULL &&
root->rightChild == NULL)
return nullptr;
return root;
}
void inorder(Node* root){
if (root != NULL){
inorder(root->leftChild);
inorder(root->rightChild);
cout << root->data << " ";
}
}
int main(void){
struct Node* root = newNode(4);
root->leftChild = newNode(2);
root->rightChild = newNode(12);
root->leftChild->leftChild = newNode(3);
root->leftChild->rightChild = newNode(5);
root->rightChild->rightChild = newNode(9);
deleteNode(root, 3);
cout << "Inorder traversal after deletion : ";
inorder(root);
return 0;
}输出
以上代码将产生以下输出:
Inorder traversal after deletion : 5 2 9 12 4
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP