《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 ...
随机推荐
- Java 解密错误InvalidKeyException: Illegal key size解决方法
做解密操作,出现如下错误 java.security.InvalidKeyException: Illegal key size // 设置解密模式为AES的CBC模式 Cipher cipher = ...
- 手动增加pe节并修改oep
一直想学学怎么动动pe文件,学习了几篇文章尤其是寒晨的文章后,自己动手也尝试了一下加节和修改oep,写出来供和我一样菜的一起进步. 一. 增加pe节需要的操作 1. 确定内存中的节的 ...
- supervisor的安装部署及集群管理
supervisor的安装部署及集群管理 supervisor官网:http://www.supervisord.org/ 参考链接: http://blog.csdn.net/xyang81/art ...
- Avalon总线学习 ---Avalon Interface Specifications
Avalon总线学习 ---Avalon Interface Specifications 1.Avalon Interfaces in a System and Nios II Processor ...
- EXPLAIN执行计划中要重点关注哪些要素
MySQL的EXPLAIN当然和ORACLE的没法比,不过我们从它输出的结果中,也可以得到很多有用的信息. 总的来说,我们只需要关注结果中的几列: 列名 备注 type 本次查询表联接类型,从这里可以 ...
- matlab与示波器连接及电脑连接
参考:http://blog.sina.com.cn/s/blog_4eff3a0e0100zb8h.html 最近进行了示波器的数据采集,MSO2014,openChoice软件+Tekvisa驱动 ...
- Windows Azure Virtual Machine (36) 扩展Azure ARM VM的磁盘大小
<Windows Azure Platform 系列文章目录> 在默认情况下,Azure ARM VM的操作系统磁盘(OS Disk),容量为: (1)Windows VM OS Disk ...
- 数据仓库专题(2)-Kimball维度建模四步骤
一.前言 四步过程维度建模由Kimball提出,可以做为业务梳理.数据梳理后进行多维数据模型设计的指导流程,但是不能作为数据仓库系统建设的指导流程.本文就相关流程及核心问题进行解读. 二.数据仓库建设 ...
- ALGO-43_蓝桥杯_算法训练_A+B Problem
问题描述 输入A,B. 输出A+B. 输入格式 输入包含两个整数A,B,用一个空格分隔. 输出格式 输出一个整数,表示A+B的值. 样例输入 样例输出 数据规模和约定 -,,,<=A,B< ...
- python3实现多excel一键导入mysql
转载:qq_37955852 一.实现场景. import excel files to mysql author:zxb 工作每个work经常会导入一到几十张不等的excel表,表少可以用navic ...