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++数据结构-快速拾遗》 树结构的更多相关文章

  1. 《C++数据结构-快速拾遗》 手写链表

    注释:吕鑫老师C++对于找工作真的是很好的教程,基本什么方面都讲的很细致,但是对于大多数人只有快进快进再快进~~ 注释:基本链表信息自己百度,这里只是一个快速拾遗过程. 1.链表定义 typedef ...

  2. 《C++数据结构-快速拾遗》 基础常识

    1.命名空间函数 namespace wjy { void print() { cout<<"; } int load(int num) { return num; } } us ...

  3. 数据结构与算法---树结构(Tree structure)

    为什么需要树这种数据结构 数组存储方式的分析 优点:通过下标方式访问元素,速度快.对于有序数组,还可使用二分查找提高检索速度. 缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低 ...

  4. Java 数据结构快速入门

    数据结构:栈 简介 栈(stack),又称堆栈,它是运算受限的线性表. 限制 栈(stack)的限制是仅允许在标的一端进行插入和删除操作,不允许在其他任何位置进行添加.查找.删除等操作. 采用该结构的 ...

  5. 数据结构快速回顾——平衡二叉树 AVL (转)

    平衡二叉树(Balanced Binary Tree)是二叉查找树的一个进化体,也是第一个引入平衡概念的二叉树.1962年,G.M. Adelson-Velsky 和 E.M. Landis发明了这棵 ...

  6. JavaScript的数据结构快速学-链表的实现

    1-单项链表 function LinkedList() { let Node = function(element) { // 辅助类,表示要添加到链表中的项 this.element = elem ...

  7. 数据结构之二叉树java实现

    二叉树是一种非线性数据结构,属于树结构,最大的特点就是度为2,也就是每个节点只有一个左子树和一个右子树.二叉树的操作主要为创建,先序遍历,中序遍历,后序遍历.还有层次遍历.遍历有两种方式,一是采用递归 ...

  8. lettcode 上的几道哈希表与链表组合的数据结构题

    目录 LRU缓存 LFU缓存 全O(1)的数据结构 lettcode 上的几道哈希表与链表组合的数据结构题 下面这几道题都要求在O(1)时间内完成每种操作. LRU缓存 LRU是Least Recen ...

  9. Redis学习笔记(二)redis 底层数据结构

    在上一节提到的图中,我们知道,可以通过 redisObject 对象的 type 和 encoding 属性.可以决定Redis 主要的底层数据结构:SDS.QuickList.ZipList.Has ...

随机推荐

  1. Intellj(IDEA)创建java webapp

    1. 创建工程 2. 创建Java文件 并且将java文件夹将设置为Sources Root 3. 创建test文件夹,并且在test文件夹下面创建java文件夹 将test下面的java文件夹标记为 ...

  2. Flume 多个agent串联

    多个agent串联 采集需求:比如业务系统使用log4j生成的日志,日志内容不断增加,需要把追加到日志文件中的数据实时采集到hdfs,使用agent串联 根据需求,首先定义以下3大要素 第一台flum ...

  3. C/C++中带可变参数的函数

    1.带可变参数的函数由来 当函数中的参数个数不确定时,这时候就需要带可变参数的函数! 如我们经常使用的C库函数printf()实际就是一个可变参数的函数, 其原型为: int printf( cons ...

  4. Django REST framework 源码剖析

    前言 Django REST framework is a powerful and flexible toolkit for building Web APIs. 本文由浅入深的引入Django R ...

  5. QT建立简单的计时器程序

    1.创建一个窗口项目 2.拖一个lcd控件命名lcdNumber,两个pushbutton,分别命名pbStart与pbEnd 3.mainWindow.h添加以下代码 private slots: ...

  6. Random 中的种子怎么理解

    种子就是生成随机数的根,就是产生随机数的基础.计算机的随机数都是伪随机数,以一个真随机数(种子)作为初始条件,然后用一定的算法不停迭代产生随机数.Java项目中通常是通过Math.random方法和R ...

  7. Python 里面什么时候用一个=,什么时候用两个=

    赋值用=                                                                   i != j != k   >>>> ...

  8. 《Effective Java》笔记-服务提供者框架

    静态工厂方法返回的对象所属的类,在编写包含该静态工厂方法的类时可以不必存在.这种灵活的静态工厂方法构成了服务提供者框架(Service Provider Framework)的基础,例如JDBC AP ...

  9. PAT 乙级 1047 编程团体赛(20) C++版

    1047. 编程团体赛(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 编程团体赛的规则为:每个参赛队由若 ...

  10. 指定分隔符连接数组元素join()

    join()方法用于把数组中的所有元素放入一个字符串.元素是通过指定的分隔符进行分隔的. 语法: arrayObject.join(分隔符) 参数说明: 注意:返回一个字符串,该字符串把数组中的各个元 ...