《C++数据结构-快速拾遗》 树结构
1.简单的二叉树结构
#include <iostream>
using namespace std;
typedef int DATA; //建立二叉树的简单结构
typedef struct SNode
{
DATA data;
SNode *pLeft,*pRight;
SNode(DATA d):data(d)//构造函数为了初始化方便
{
pLeft = NULL;
pRight = NULL;
}
}SNode; int main(int argc,char*argv[])
{
SNode* p = new SNode();
p->pLeft = new SNode();
p->pRight = new SNode();
cout<<p->data<<endl<<p->pLeft->data<<endl<<p->pRight->data<<endl;
cout<<"hello deepin";
return ;
}
#include <iostream>
using namespace std;
typedef int DATA; //建立二叉树的简单结构
typedef struct SNode
{
DATA data;
SNode *pLeft,*pRight;
SNode(DATA d):data(d)//构造函数为了初始化方便
{
pLeft = NULL;
pRight = NULL;
}
}SNode;
SNode* m_pRoot = NULL;//如果不定义全局变量,就需要通过函数参数传递
void AddData()
{
//第一层
SNode* p = new SNode();
m_pRoot = p;
//第二层
m_pRoot->pLeft = new SNode();
m_pRoot->pRight = new SNode();
//第三层
m_pRoot->pLeft->pLeft = new SNode();
m_pRoot->pLeft->pRight = new SNode();
m_pRoot->pRight->pLeft = new SNode();
m_pRoot->pRight->pRight = new SNode();
//第四层
m_pRoot->pLeft->pLeft->pLeft = new SNode();
m_pRoot->pLeft->pRight->pLeft = new SNode();
} int main(int argc,char*argv[])
{
cout<<m_pRoot->data<<endl<<m_pRoot->pLeft->data<<endl<<m_pRoot->pRight->data<<endl
<<m_pRoot->pLeft->pLeft->data<<endl<<m_pRoot->pLeft->pRight->data<<endl<<m_pRoot->pRight->pLeft->data<<endl
<<m_pRoot->pRight->pRight->data<<endl<<m_pRoot->pLeft->pLeft->pLeft->data<<endl
<<m_pRoot->pLeft->pRight->pLeft->data<<endl;
cout<<"hello deepin";
return ;
}


2.前序遍历
#include <iostream>
using namespace std;
typedef int DATA; //建立二叉树的简单结构
typedef struct SNode
{
DATA data;
SNode *pLeft,*pRight;
SNode(DATA d):data(d)//构造函数为了初始化方便
{
pLeft = NULL;
pRight = NULL;
}
}SNode;
SNode* m_pRoot = NULL;//如果不定义全局变量,就需要通过函数参数传递
void AddData()
{
//第一层
SNode* p = new SNode();
m_pRoot = p;
//第二层
m_pRoot->pLeft = new SNode();
m_pRoot->pRight = new SNode();
//第三层
m_pRoot->pLeft->pLeft = new SNode();
m_pRoot->pLeft->pRight = new SNode();
m_pRoot->pRight->pLeft = new SNode();
m_pRoot->pRight->pRight = new SNode();
//第四层
m_pRoot->pLeft->pLeft->pLeft = new SNode();
m_pRoot->pLeft->pRight->pLeft = new SNode();
}
void FPrint(SNode* pRoot)
{
//SNode* p = m_pRoot;
if(!pRoot) return;
cout<<pRoot->data<<endl;
//递归调用本函数实现打印
if(pRoot->pLeft)
FPrint(pRoot->pLeft);
if(pRoot->pRight)
FPrint(pRoot->pRight);
}
int main(int argc,char*argv[])
{
AddData();
FPrint(m_pRoot);
cout<<"hello deepin";
return ; }


3.中序遍历
#include <iostream>
using namespace std;
typedef int DATA; //建立二叉树的简单结构
typedef struct SNode
{
DATA data;
SNode *pLeft,*pRight;
SNode(DATA d):data(d)//构造函数为了初始化方便
{
pLeft = NULL;
pRight = NULL;
}
}SNode;
SNode* m_pRoot = NULL;//如果不定义全局变量,就需要通过函数参数传递
void AddData()
{
//第一层
SNode* p = new SNode();
m_pRoot = p;
//第二层
m_pRoot->pLeft = new SNode();
m_pRoot->pRight = new SNode();
//第三层
m_pRoot->pLeft->pLeft = new SNode();
m_pRoot->pLeft->pRight = new SNode();
m_pRoot->pRight->pLeft = new SNode();
m_pRoot->pRight->pRight = new SNode();
//第四层
m_pRoot->pLeft->pLeft->pLeft = new SNode();
m_pRoot->pLeft->pRight->pLeft = new SNode();
}
//中序遍历
void MPrint(SNode* pRoot)
{
if(!pRoot) return;
if(pRoot->pLeft)
MPrint(pRoot->pLeft);
cout<<pRoot->data<<endl;
//递归调用本函数实现打印
if(pRoot->pRight)
MPrint(pRoot->pRight);
}
int main(int argc,char*argv[])
{
AddData();
MPrint(m_pRoot);
cout<<"hello deepin";
return ; }


3.后续遍历
#include <iostream>
using namespace std;
typedef int DATA; //建立二叉树的简单结构
typedef struct SNode
{
DATA data;
SNode *pLeft,*pRight;
SNode(DATA d):data(d)//构造函数为了初始化方便
{
pLeft = NULL;
pRight = NULL;
}
}SNode;
SNode* m_pRoot = NULL;//如果不定义全局变量,就需要通过函数参数传递
void AddData()
{
//第一层
SNode* p = new SNode();
m_pRoot = p;
//第二层
m_pRoot->pLeft = new SNode();
m_pRoot->pRight = new SNode();
//第三层
m_pRoot->pLeft->pLeft = new SNode();
m_pRoot->pLeft->pRight = new SNode();
m_pRoot->pRight->pLeft = new SNode();
m_pRoot->pRight->pRight = new SNode();
//第四层
m_pRoot->pLeft->pLeft->pLeft = new SNode();
m_pRoot->pLeft->pRight->pLeft = new SNode();
}
//后序遍历
void BPrint(SNode* pRoot)
{
if(!pRoot) return;
if(pRoot->pLeft)
BPrint(pRoot->pLeft);
if(pRoot->pRight)
BPrint(pRoot->pRight);
//递归调用本函数实现打印
cout<<pRoot->data<<endl;
}
int main(int argc,char*argv[])
{
AddData();
BPrint(m_pRoot);
cout<<"hello deepin";
return ; }


4.不知道啥树(貌似霍夫曼树)
遵循一个原则,添加的值大于某个节点,那么就在该节点左边添加,小于就在右边添加!
#include <iostream>
using namespace std;
typedef int DATA; //建立二叉树的简单结构
typedef struct SNode
{
DATA data;
SNode *pLeft,*pRight;
SNode(DATA d):data(d)//构造函数为了初始化方便
{
pLeft = pRight = NULL;
}
}SNode;
SNode* m_pRoot = NULL;//如果不定义全局变量,就需要通过函数参数传递
void SetData(DATA data,SNode* &pRoot)
{
if(!pRoot)
{
SNode* p = new SNode(data);
pRoot = p;
return;
}
if(data <= pRoot->data)
SetData(data,pRoot->pLeft);
else
SetData(data,pRoot->pRight);
}
//前序遍历
void FPrint(SNode* pRoot)
{
if(!pRoot) return;
cout<<pRoot->data<<endl;
//递归调用本函数实现打印
if(pRoot->pLeft)
FPrint(pRoot->pLeft);
if(pRoot->pRight)
FPrint(pRoot->pRight);
}
int main(int argc,char*argv[])
{
SetData(,m_pRoot);
SetData(,m_pRoot);
SetData(,m_pRoot);
SetData(,m_pRoot);
SetData(,m_pRoot);
SetData(,m_pRoot);
SetData(,m_pRoot);
FPrint(m_pRoot);
cout<<"hello deepin";
return ;
}


https://chuanke.baidu.com/v1760453-135963-552446.html
《C++数据结构-快速拾遗》 树结构的更多相关文章
- 《C++数据结构-快速拾遗》 手写链表
注释:吕鑫老师C++对于找工作真的是很好的教程,基本什么方面都讲的很细致,但是对于大多数人只有快进快进再快进~~ 注释:基本链表信息自己百度,这里只是一个快速拾遗过程. 1.链表定义 typedef ...
- 《C++数据结构-快速拾遗》 基础常识
1.命名空间函数 namespace wjy { void print() { cout<<"; } int load(int num) { return num; } } us ...
- 数据结构与算法---树结构(Tree structure)
为什么需要树这种数据结构 数组存储方式的分析 优点:通过下标方式访问元素,速度快.对于有序数组,还可使用二分查找提高检索速度. 缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低 ...
- Java 数据结构快速入门
数据结构:栈 简介 栈(stack),又称堆栈,它是运算受限的线性表. 限制 栈(stack)的限制是仅允许在标的一端进行插入和删除操作,不允许在其他任何位置进行添加.查找.删除等操作. 采用该结构的 ...
- 数据结构快速回顾——平衡二叉树 AVL (转)
平衡二叉树(Balanced Binary Tree)是二叉查找树的一个进化体,也是第一个引入平衡概念的二叉树.1962年,G.M. Adelson-Velsky 和 E.M. Landis发明了这棵 ...
- JavaScript的数据结构快速学-链表的实现
1-单项链表 function LinkedList() { let Node = function(element) { // 辅助类,表示要添加到链表中的项 this.element = elem ...
- 数据结构之二叉树java实现
二叉树是一种非线性数据结构,属于树结构,最大的特点就是度为2,也就是每个节点只有一个左子树和一个右子树.二叉树的操作主要为创建,先序遍历,中序遍历,后序遍历.还有层次遍历.遍历有两种方式,一是采用递归 ...
- lettcode 上的几道哈希表与链表组合的数据结构题
目录 LRU缓存 LFU缓存 全O(1)的数据结构 lettcode 上的几道哈希表与链表组合的数据结构题 下面这几道题都要求在O(1)时间内完成每种操作. LRU缓存 LRU是Least Recen ...
- Redis学习笔记(二)redis 底层数据结构
在上一节提到的图中,我们知道,可以通过 redisObject 对象的 type 和 encoding 属性.可以决定Redis 主要的底层数据结构:SDS.QuickList.ZipList.Has ...
随机推荐
- Jmeter--报错 WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.
今天要用Jmeter测试服务器性能,发现GUI界面总是有warning提示: WARNING: Could not open/create prefs root node Software\JavaS ...
- 转JMeter ----数据库 not allowed to connect to this MySQL
测试的时候遇到报错: Cannot create PoolableConnectionFactory (null, message from server: "Host 'ceshiP ...
- piwik优化之定时任务生成统计数据
piwik的ui界面,使用起来是无比的慢,让苏南大叔不得不对比wordpress的使用体验.当然了,如果你的服务器足够强大,这些都是小事儿.官方对此给出了一系列的优化建议,大家可以读一下:https: ...
- LDO与DC-DC
LDO的功耗可能较低,在430中如果用3.7v锂电池供电,最好用LDO DC-DC功耗较高 其它的区别不大
- [NEWS]Microsoft expands partnerships with AOL and AppNexus, Bing to power search for AOL properties
http://advertising.microsoft.com/en/blog/33906/microsoft-expands-partnerships-with-aol-and-appnexus- ...
- ALGO-147_蓝桥杯_算法训练_4-3水仙花数
问题描述 打印所有100至999之间的水仙花数.所谓水仙花数是指满足其各位数字立方和为该数字本身的整数,例如 =^+^+^. 样例输入 一个满足题目要求的输入范例. 例: 无 样例输出 xxx xxx ...
- windows下网络丢包模拟软件(Network Emulator for Windows Toolkit)
最近公司有一个直播的测试项目,需要模拟各种网络环境下的直播状态,最后找到一款这样的软件(如果有遇到更好的软件,望和网友多多交流) 介绍一款windows下的网络模拟器,可以模拟各种丢包或延迟的网络(N ...
- Android开发之Activity(cho1)篇
一.Activity判断网络是否连通: 首先创建一个Andorid Project项目,然后添加一个on1类,Layout一个button控件和Textview控件. values有一个Color.x ...
- P2064进制转换
题目:https://www.luogu.org/problemnew/show/P2084 既然这道题放在字符串类型里,那么这里的N肯定得用字符数组来储存(这样也方便输出). 那么我们不妨定义一个字 ...
- Dubbo(5)优化:接口抽取以及依赖版本统一
优化点: 1.在上面provider和consumer程序中都存在DemoProviderService接口了,两个项目中存在同样的东西,代码多余以及不方便管理: 正式的项目中存在很多的接口的,将统一 ...