在 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