树数据结构详解:插入、查找、删除操作指南
树数据结构详解:插入、查找、删除操作指南
本文将深入解析树数据结构的代码实现,涵盖节点定义、插入、查找和删除等基本操作,并提供代码示例,帮助你更好地理解和应用这一重要数据结构。
1. 节点定义:TreeNode 结构体
首先,我们定义一个名为 TreeNode 的结构体来表示树中的节点。每个节点包含以下信息:
val:存储节点的整数值。-left:指向左子节点的指针。-right:指向右子节点的指针。c++struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};
2. 树的定义和操作:Tree 类
接下来,我们定义一个名为 Tree 的类,用于表示整个树结构。Tree 类包含一个指向根节点的指针 root,并提供以下成员函数:
-
insert(int val):向树中插入值为val的新节点。该函数内部调用insertNode函数实现递归插入。 -
insertNode(TreeNode* node, int val):递归插入节点。根据节点值的大小,将新节点插入到左子树或右子树中,并返回插入后的根节点。 -
search(int val):在树中查找值为val的节点。该函数内部调用searchNode函数实现递归查找。 -
searchNode(TreeNode* node, int val):递归查找节点。在树中递归搜索给定值,并返回是否找到。 -
remove(int val):从树中删除值为val的节点。该函数内部调用removeNode函数实现递归删除。 -
removeNode(TreeNode* node, int val):递归删除节点。根据节点值的大小递归查找要删除的节点,并根据不同情况进行删除操作。 -
findMinNode(TreeNode* node):辅助函数,用于查找以node为根节点的子树中的最小节点。它循环遍历左子树,找到最左边的节点并返回。c++class Tree {public: TreeNode* root; Tree() : root(NULL) {}TreeNode* insert(int val) { return insertNode(root, val); }
TreeNode* insertNode(TreeNode* node, int val) { if (node == NULL) { return new TreeNode(val); } if (val < node->val) { node->left = insertNode(node->left, val); } else { node->right = insertNode(node->right, val); } return node; }
bool search(int val) { return searchNode(root, val); }
bool searchNode(TreeNode* node, int val) { if (node == NULL) { return false; } else if (node->val == val) { return true; } else if (val < node->val) { return searchNode(node->left, val); } else { return searchNode(node->right, val); } }
TreeNode* remove(int val) { return removeNode(root, val); }
TreeNode* removeNode(TreeNode* node, int val) { if (node == NULL) { return NULL; } if (val < node->val) { node->left = removeNode(node->left, val); } else if (val > node->val) { node->right = removeNode(node->right, val); } else { if (node->left == NULL) { TreeNode* temp = node->right; delete node; return temp; } else if (node->right == NULL) { TreeNode* temp = node->left; delete node; return temp; } TreeNode* temp = findMinNode(node->right); node->val = temp->val; node->right = removeNode(node->right, temp->val); } return node; }
TreeNode* findMinNode(TreeNode* node) { while (node->left != NULL) { node = node->left; } return node; }};
3. 使用示例c++int main() { Tree tree; tree.insert(5); tree.insert(3); tree.insert(7); tree.insert(2); tree.insert(4);
if (tree.search(4)) { cout << '找到了节点值 4' << endl; } else { cout << '未找到节点值 4' << endl; }
tree.remove(3);
if (tree.search(3)) { cout << '找到了节点值 3' << endl; } else { cout << '未找到节点值 3' << endl; }
return 0;}
这段代码演示了如何创建树对象、插入节点、查找节点以及删除节点。你可以根据实际需求调用这些操作来操作树,并根据具体的数据结构和算法需求进行修改和扩展。
原文地址: https://www.cveoy.top/t/topic/qDo 著作权归作者所有。请勿转载和采集!