C++建立查找删除节点二叉排序树
来源:互联网 发布:未来计价软件视频 编辑:程序博客网 时间:2024/05/20 12:50
简历方法。二叉树简历。只是小的在根的左边 大的在右边。。
删除 是只写了左右子树都不为空的删除
删掉当前节点。用一个数据来填补空缺。代码里面看
H
#ifndef H_H#define H_H#include <iostream>struct Node{int num;Node*lNext;Node*rNext;};class BinaryTree{public:BinaryTree();~BinaryTree();void Insert(Node*&p, int m);void show(Node*&p);Node*Find(int m);void Delete(int m);Node*pHead;};#endif //H_H
CPP
#include "h.h"using namespace std;BinaryTree::BinaryTree(){}BinaryTree::~BinaryTree(){}void BinaryTree::Insert(Node*&p, int m){if (m < 0)return;if (p == nullptr){p = new Node;p->num = m;p->lNext = nullptr;p->rNext = nullptr;return;}if (m == p->num)return;if (m < p->num)Insert(p->lNext, m);else if (m>p->num)Insert(p->rNext, m);}void BinaryTree::show(Node*&p){if (p){cout << p->num << endl;show(p->lNext);show(p->rNext);}}Node*BinaryTree::Find(int m){Node*p = pHead;while (p){if (p->num == m)return p;if (p->num<m){p = p->rNext;}else{p = p->lNext;}}return nullptr;}void BinaryTree::Delete(int m){Node*p = Find(m);if (!p){return;}if (p->lNext&&p->rNext)//先拿个左子树。再一直倒右拐。直到没有右子树了。这个就是拿来替换删掉那个节点的节点了{Node*temp = p->lNext;Node *d = p;while (temp->rNext){d = temp;temp = temp->rNext;}p->num = temp->num;if (d!=p)//这个表明。是倒右拐了的 前驱指向下一个的下一个{Node*t = d->rNext;d->rNext = temp->lNext;delete t;//处理被过掉那个节点 这个t delete了指向的内存才能重用t = nullptr;}else//没有右子树 直接接左边{Node*t = d->lNext;d->lNext = temp->lNext;delete t;t = nullptr;//cout << "temp is " << temp->num << endl;}}}int main(){BinaryTree bt;//bt.initTree();bt.Insert(bt.pHead, 100);bt.Insert(bt.pHead, 90);bt.Insert(bt.pHead, 110);bt.Insert(bt.pHead, 80);bt.Insert(bt.pHead, 70);bt.Insert(bt.pHead, 65);bt.Insert(bt.pHead, 75);bt.Insert(bt.pHead, 95);bt.show(bt.pHead);Node*p = bt.Find(80);if (p){cout << p->num << " had been found"<<endl << endl;}else{cout << "Not Find" << endl;}bt.Delete(90);试过90 100 都阔以bt.show(bt.pHead);system("pause");}他是你拿后面的节点来填你换的节点这个套路。看图理解理解
0 0
- C++建立查找删除节点二叉排序树
- 二叉排序树节点删除(c++)
- 二叉排序树的建立和树中节点的查找删除操作
- 二叉排序树的查找、插入、删除、建立
- 二叉排序树的建立、查找和删除
- 二叉排序树,建立,查找,删除等操作
- 二叉树的建立、节点查找以及节点删除C和C++实现
- 二叉树的建立、节点查找以及节点删除C和C++实现
- 二叉排序树(二叉查找树)BST构造,节点插入,节点查找,节点删除(java)
- 二叉排序树,完成创建节点,插入节点,删除节点,查找节点,中序遍历的功能
- 二叉排序树的操作(建立、插入、删除和查找)
- java实现二叉排序树的建立,查找,插入,删除
- 二叉排序树之删除节点
- 二叉排序树删除节点
- 二叉排序树删除节点
- 二叉排序树的建立,删除
- 数据结构实验之查找一:二叉排序树 SDUT 二叉排序树的建立与判断 (与删除)
- 二叉排序树查找、插入、删除
- 【寒假任务】 洛谷1059 明明的随机数
- [BZOJ2882][后缀自动机]工艺
- 哈希表原理
- Markdown-01文本格式化(学习笔记)
- Error:(22, 0) Could not find method android() for argument
- C++建立查找删除节点二叉排序树
- 欢迎使用CSDN-markdown编辑器
- 461. Hamming Distance [LeetCode]
- 每天一个linux命令(1)
- nyoj26_孪生素数(筛选法求素数)
- ZooKeeper的Java Api初探
- 隐公元年
- 通俗理解卷积神经网络
- Java内存模型 读笔