天马阁

 找回密码
 立即注册
                                        →→→→→→→→→→→→ 1点击查看所有VIP教程目录长列表(总教程数269个) 2办理VIP详情进入 ←←←←←←←←←←←←
1 x64CE与x64dbg入门基础教程 7课 已完结 2 x64汇编语言基础教程 16课 已完结 3 x64辅助入门基础教程 9课 已完结 4 C++x64内存辅助实战技术教程 149课 已完结
5 C++x64内存检测与过检测技术教程 10课 已完结 6 C+x64二叉树分析遍历与LUA自动登陆教程 19课已完结 7 C++BT功能原理与x64实战教程 29课 已完结 8 C+FPS框透视与自瞄x64实现原理及防护思路 30课完结
64驱?封? 9 64反驱? 10 64位V? 11 绝? 12 ???课?
13 64透 ? 14 64U ? 15 64Q ? 16 64功 ?
17 64U ? 18 64模 ? 19 64多 ? 20 64网 ?
21 64注 ? 22 64火 ? 23 64棋 ? 24 64自二链L?
25 64破 ? VIP会员办理QQ: 89986068   
【请先加好友,然后到好友列表双击联系客服办理,不然可能无法接受到信息。】
27 加入2000人交流群637034024 3 28 免责声明?
查看: 5628|回复: 0

二叉树代码,在里面我做了大量的注释!有兴趣的

[复制链接]

14

主题

0

回帖

17

积分

编程入门

Rank: 1

天马币
28
发表于 2024-3-4 09:15:58 | 显示全部楼层 |阅读模式
/*二叉查找树片段,二叉查找树中定义左子树的数据必须要小于根的数据,
                     右子树的数据必须是大于或等于根的数据

  在遍历中...如果是先根后左最后右子树---则称为前序遍历也称为先根遍历
             如果是先左后根最后右子树---则称为中序遍历也称为中根遍历
                     如果是先左后右最后根树-----则称为后序遍历也称为后根遍历
                     在这三种中中根遍历是最常用的(因为中根遍历完成后数据的
                     顺序是从小到大排列出来的(注意看上面对于二叉查找树的定义)
*/
#include <iostream>
using namespace std;
typedef int T;
Node* Root=NULL;//定义一个根
  1. struct Node
  2. {
  3.         T Data;
  4.         Node* Left; //指向左子树的根节点
  5.         Node* Right;//指向右子树的根节点
  6.         Node(const T& t) : Data(t),Left(NULL),Right(NULL){}//构造函数初始化数据
  7. };
  8. void Travel(Node* tree) //遍历函数中根遍历
  9. {
  10.         if (tree==NULL) return;
  11.         Travel(tree->Left);
  12.         cout<<tree->Data<<' ';
  13.         Travel(tree->Left);
  14. }

  15. void Clear(Node*& tree)//删除所有的根节点
  16. {      
  17.         if(tree==NULL) return;
  18.         Clear(tree->Left);
  19.         Clear(tree->Right);
  20.         delete tree;
  21.         tree=NULL;
  22. }

  23. int Size(Node* tree)//算出一共有多少个节点
  24. {
  25.         if(tree==NULL) return 0;
  26.         return Size(tree->Left)+Size(tree->Right)+1 //左子树的节点加右子树的节点加根的一个节点
  27. }

  28. void Insert(Node*& tree,Node* p)//插入节点
  29. {
  30.         if(tree==NULL) tree=p;
  31.         else if(p==NULL) return;
  32.         else if(p->Data<tree->Data)//插入的数据如果小于根的数据
  33.                 Insert(tree->Left,p);//向左子树插入
  34.         else Insert(tree->Right,p);//否则向右子树插入
  35. }

  36. Node*& Find(Node*& tree,const T& t) //查找数据
  37. {
  38.         if(tree==NULL || tree->Data==t) return tree;
  39.         if(t<tree->Data) return Find(tree->Left,t); //如果要查找的数据小于根的数据那进入左子树查找
  40.         else return Find(tree->Right,t) //否则进入右子树查找
  41. }

  42. void Erase(Node*& tree,const T& t) //删除一个对应数据的节点
  43. {
  44.         Node*& p=Find(tree,t);//先查找
  45.         if(p==NULL) return;//表示未找到
  46.         Insert(p->Right,p->Left);//找到后把要删除节点下的子树移动到相对应的右子树后面
  47.         Node* q=p;//保存一份,为了删除因为P指针经过下面的指向后改变
  48.         p=p->Right; //把根的指针重新指向
  49.         delete q; //最后删除这个节点
  50. }

  51. void Updata(const T& old,const T& new)//修改数据
  52. {
  53.         Node* p=Find(Root,old);//从根开始查找
  54.         if(p==NULL) return;
  55.         Erase(Root,old);//找到后把这个节点删除
  56.         p=new Node(new);
  57.         Insert(Root,p);//重新插入
  58. }
复制代码

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

天马阁|C/C++辅助教程|安卓逆向安全| 论坛导航|免责申明|Archiver||网站地图
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表天马阁立场!
任何人不得以任何方式翻录、盗版或出售本站视频,一经发现我们将追究其相关责任!
我们一直在努力成为最好的编程论坛!
Copyright© 2010-2021 All Right Reserved.
快速回复 返回顶部 返回列表