二叉查找(排序)树——完
来源:互联网 发布:如何评价朱元璋 知乎 编辑:程序博客网 时间:2024/06/09 21:04
#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 add1(int value);void traverse();bool search(int value, ptrNode *&ptr);bool remove(int value);};void BinaryTree::add1(int value) {ptrNode *ptr;if (!search(value, ptr)) {ptrNode p = new Node();p->value = value;p->left = NULL;p->right = NULL;*ptr = p;}}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;}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->right;while (r->right) {q = r;r = r->right;}p->value = r->value;q->right = r->left;}delete r;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->add1(62);bt->add1(88);bt->add1(58);bt->add1(47);bt->add1(35);bt->add1(73);bt->add1(51);bt->add(99);bt->add(37);bt->add(93);bt->traverse();bt->remove(62);bt->traverse();return 0;}
0 0
- 二叉查找(排序)树——递归查找
- 二叉查找(排序)树——完
- 二叉查找(排序)树——删除操作
- 二叉查找(排序)树
- 二叉查找(排序)树
- 二叉排序(查找)树
- 二叉排序(查找)树
- 二叉排序/查找树
- 二叉排序查找树
- 排序二叉树查找
- 二叉树排序查找
- SICP 建立二叉查找(排序)树
- 二叉排序(查找,搜索)树详解
- Java基础 - 排序二叉树(二叉查找树)
- 数据结构和算法——二叉排序(查找)树及实现
- 查找(动态查找表——二叉查找和二叉平衡树)
- 二叉查找树实现排序
- 算法-二叉树查找排序
- Windows 7上可以上QQ,无法访问网页的DNS解析的解决
- malloc和new有什么区别
- Python - 静态函数(staticmethod), 类函数(classmethod), 成员函数 区别(完全解析)
- ZOJ 3605 Find the Marble(DP)
- 网络命令详解
- 二叉查找(排序)树——完
- Python 基础2
- Java排序算法4:希尔排序
- ThinkPHP 数据分页 带查询条件
- 数据库原理 知识点总结
- 穷举所有的双色球
- Esper学习之十二:EPL语法(八)
- Demo8Map典型应用_按要求排序,先按省份的拼音序,每个省份内再按姓名拼音序来排列。
- 黑马程序员_java中的泛型