二叉查找(排序)树——删除操作
来源:互联网 发布:foxmail迁移数据 编辑:程序博客网 时间:2024/06/01 21:30
#include <iostream>#include <stack>using namespace std;typedef struct Node {int value;struct Node *left;struct Node *right;} Node, *ptrNode;class BinaryTree {private:ptrNode tree;public:void init();bool isEmpty();void add(int value);void traverse();bool search(int value, ptrNode *&ptr);bool remove(int value);};bool BinaryTree::remove(int value) {ptrNode *ptr = NULL;if (search(value, ptr)) {ptrNode r = *ptr;if ((*ptr)->left == NULL) {*ptr = (*ptr)->right;} else if ((*ptr)->right == NULL) {*ptr = (*ptr)->left;} else {ptrNode p = r;ptrNode q = r;r = p->left;while (r->right) {q = r;r = r->right;}p->value = r->value;if (q != p) {q->right = r->left;} else {q->left = r->left;}q->right = r->left;}delete r;return true;}return false;}bool BinaryTree::search(int value, ptrNode *&ptr) {ptr = &tree;while (*ptr) {if (value < (*ptr)->value) {ptr = &(*ptr)->left;} else if (value > (*ptr)->value) {ptr = &(*ptr)->right;} else {return true;}}return false;}void BinaryTree::traverse() {if (!isEmpty()) {stack<ptrNode> s;ptrNode p = tree;while (p || !s.empty()) {if (p != NULL) {if (p->left != NULL) {s.push(p);p = p->left;} else {std::cout << p->value << " ";p = p->right;}} else {p = s.top();s.pop();std::cout << p->value << " ";p = p->right;}}std::cout << std::endl;}}void BinaryTree::init() {tree = NULL;}bool BinaryTree::isEmpty() {if (tree == NULL)return true;return false;}void BinaryTree::add(int value) {ptrNode ptr = new Node();ptr->value = value;ptr->left = NULL;ptr->right = NULL;if (isEmpty()) {tree = ptr;} else {ptrNode *p = &tree;while (*p != NULL && (*p)->value != value) {if (value < (*p)->value) {p = &(*p)->left;} else {p = &(*p)->right;}}if (*p == NULL) {*p = ptr;}}}int main() {BinaryTree *bt = new BinaryTree();bt->init();bt->add(62);bt->add(88);bt->add(58);bt->add(47);bt->add(35);bt->add(73);bt->add(51);bt->add(99);bt->add(37);bt->add(93);bt->add(53);bt->traverse();bt->remove(47);bt->traverse();return 0;}
0 0
- 二叉查找(排序)树——删除操作
- 二叉查找树——删除操作(算法导论)
- 二叉查找树删除操作
- 二叉查找树的操作(插入、删除、查找)
- 二叉查找(排序)树——递归查找
- 二叉搜索(排序)树的 查找、插入、删除
- 二叉查找树(二叉排序树)创建,插入,删除操作。
- 二叉查找树的删除操作
- 查找二叉树删除节点的操作
- 二叉查找树的删除操作
- 二叉树查找,遍历,删除操作
- 二叉查找树/删除结点操作
- 二叉查找树——懒惰删除
- java专题——二叉树(插入、查找、删除)
- 关于搜索二叉树的各种操作(插入,删除,输出,查找,递归非递归排序)
- c++二叉排排序树的实现 补上了删除和查找操作
- Java实现二叉排序(查找)树的操作
- 二叉查找树的基本操作之查找插入删除
- 如何保存用户的列表排序
- 数据分析师面试常见的77个问题
- 浅谈图像处理方向的就业前景
- JDK环境变量设置
- Prerequisites for App Engine development are missing!
- 二叉查找(排序)树——删除操作
- 使用Winpcap进行IP数据包统计
- 简述PCB制作过程
- C++字符串split方法
- 携程初赛1001
- #ifdef _DEBUG
- 搭建高可用的MongoDB集群(上):MongoDB的配置与副本集
- websphere 7 下面 log4j 不输出解决办法
- 数据结构10:二分查找的递归与非递归表示与实现