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. Spring 中PageHelper分页插件使用

    1.增加pagehelper <!-- mybatis pager --> <dependency> <groupId>com.github.pagehelper& ...

  2. golang database sql DSN (Data Source Name)中的timeout, readTimeout

    golang 语言,在打开mysql DB时,有时会用到timeout,readTimeout两个参数. 1.timeout 建立连接超时时间 例如, "30s", "0 ...

  3. Shell中怎么获取当前日期和时间

    转载自:https://zhidao.baidu.com/question/627912810044012524.html 获得当天的日期 [root@master ~]# date +%Y-%m-% ...

  4. Usbhub驱动编译

    在3g 4g的usb驱动基础上,加入以下部分,就可以驱动hub了 kmod-usb-hid 3.3.8-1 kmod-usbip 3.3.8-1 kmod-usbip-client 3.3.8-1 k ...

  5. 【MySQL】批量数据循环插入

    双重循环插入 DELIMITER ;; CREATE PROCEDURE test_insert() BEGIN ; ; ) DO -- repeat ; -- select a; ) DO ); ; ...

  6. ML平台_小米深度学习平台的架构与实践

    (转载:http://www.36dsj.com/archives/85383)机器学习与人工智能,相信大家已经耳熟能详,随着大规模标记数据的积累.神经网络算法的成熟以及高性能通用GPU的推广,深度学 ...

  7. Excel技巧--分类求和与空白批量填充

    分类求和: 当我们要对以上多个分类空白求和时,可以巧用Alt+=键: 1.选择对应要求和的列: 2.点击“查找与选择”下拉列,选择“定位条件”,对话框选择“空值”,点确定.将列中的空白单元格选好: 3 ...

  8. 黄聪:bootstrapValidator验证成功,按钮变灰却无法提交的问题

    对于这个坑真心无语! 主要问题是按钮的id和name不能为submit! 改成别的就好了!

  9. Windows系统下安装zip命令

    从GnuWin32 项目页面 上下载并安装 zip 命令 添加环境变量到系统中,即将安装目录添加至你的系统的 Path环境变量中( 假设安装目录时D:\Program Files (x86)\GnuW ...

  10. R read.table 一个问题的解决

    Warning message: In scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, : EOF within q ...