《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 ...
随机推荐
- C# 打印、输入和for循环的使用
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- python获取代理IP并测试是否可用
# coding: utf-8 import urllib2 import re import time def getDL(page): url = 'http://www.xicidaili.co ...
- Ubuntu Server 与 Ubuntu Desktop之间的区别
服务器版本的内核时钟频率由桌面的100hz转为1khz,这一点是为某些服务器应用提供更好的性能和吞吐量. 除此之外,服务器内核支持SMP"对称多处理"(Symmetrical Mu ...
- 手机开发者模型,上方显示p dx dy xv yv
prs:当前压强 (红色的时候 表示 压强趋向稳定或达到最大压强)p:触碰点状况p:(x/y) x为当前监控的触摸点 y为当次触摸屏幕操作最大触摸点个数 你可以理解为 y是有多少根手指放过在屏幕上 x ...
- Ubuntu Docker安装
docker容器改变apt-get源 记得先:apt-get update 进入容器 cd /etc/apt echo "">sources.list echo " ...
- Apache Solr 介绍
Apache Solr 介绍 Solr 是什么? Solr 是一个开源的企业级搜索服务器,底层使用易于扩展和修改的Java 来实现.服务器通信使用标准的HTTP 和XML,所以如果使用Solr 了解J ...
- IIS短文件名泄露漏洞检测
http://www.xxxx.com/*~1****/a.aspx http://www.xxxx.com/l1j1e*~1****/a.aspx If the first one return a ...
- Flask-状态保持-CSRF
问题:cookies基于浏览器的同源策略,不同域名的cookie不能相互访问,为什么可以进行跨站请求伪造呢? 原因:cookie基于浏览器的同源策略,确实是在实现状态保持的时候,不能跨域访问. 跨站请 ...
- 纯css实现
实现此效果 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 <!DOCTYPE html><html lang=& ...
- 【支付专区】之解析微信支付返回xml
public static Map<String,Object> parseBodyXml2Map(String xml){ Map<String,Object> map = ...