C/C++程序基础 (八)数据结构
- 非递归先序遍历
-
// 输出, 遍历左子树,遍历右子树
void firstOrder(Node* root)
{
stack<Node*> leftNodes;
Node* curr = root; // deal each node
while(curr != NULL && !leftNodes.empty())
{
// deal with left subtree
while(curr != NULL)
{
cout << curr -> data << " ";
// store curr node for reading right subtree
leftNodes.push(curr);
curr = curr -> left;
} // deal with right subtree
if(!leftNodes.empty())
{
curr = leftNodes.top();
leftNodes.pop(); curr = curr -> right;
}
}
}
-
- 非递归中序遍历
// 输出, 遍历左子树,遍历右子树
void middleOrder(Node* root)
{
stack<Node*> leftNodes;
Node* curr = root; // deal each node
while(curr != NULL && !leftNodes.empty())
{
// deal with left subtree
while(curr != NULL)
{
// store curr node for reading right subtree
leftNodes.push(curr);
curr = curr -> left;
} // deal with right subtree
if(!leftNodes.empty())
{
curr = leftNodes.top();
leftNodes.pop();
// cout curr node
cout << curr -> data << " "; curr = curr -> right;
}
}
}
- 非递归后序遍历
// 输出, 遍历左子树,遍历右子树
void lastOrder(Node* root)
{
stack<Node*> leftNodes;
stack<bool> tags;
bool curr_tag = true;
Node* curr = root; // deal each node
while(curr != NULL && !leftNodes.empty())
{
// deal with left subtree
while(curr != NULL)
{
// store curr node for reading right subtree
leftNodes.push(curr); // mark have not seen right nodes
tags.push(false);
curr = curr -> left;
} // deal with right subtree
if(!leftNodes.empty())
{
curr = leftNodes.top();
curr_tag = tags.top();
tags.pop(); if(curr_tag)
{
cout << curr -> data << " ";
leftNodes.pop();
// have already dealt right subtree
p = NULL;
}
else
{
curr = curr -> right;
// mark has dealt with rightsubtree
tags.push(true);
}
}
}
}
- 二叉排序树:左<父<右
- 哈弗曼树
- 哈夫曼编码:带权路径最短
- 构建方法:从最远端构建
- 平衡二叉(搜索)树:每个节点的左右子树深度差的绝对值小于等于1。
- 一种实现:红黑树
- 基本失衡情况:左左(右旋),右右(左旋),左右,右左。
- 红黑树
- 节点:红色或黑色。根节点:黑色。叶节点:黑色。红色节点的孩子为黑色。根节点到其每个叶子节点的所有路径包含相同数目的黑色节点。
- 等待补充
- 完全二叉树和满二叉树
- 完全二叉树,集中在左边
- 满二叉树,没有叶子节点
C/C++程序基础 (八)数据结构的更多相关文章
- Java基础八--构造函数
Java基础八--构造函数 一.子父类中构造函数的特点 1.1 为什么在子类构造对象时,发现,访问子类构造函数时,父类也运行了呢? 原因是:在子类的构造函数中第一行有一个默认的隐式语句. super( ...
- JAVA并行程序基础
JAVA并行程序基础 一.有关线程你必须知道的事 进程与线程 在等待面向线程设计的计算机结构中,进程是线程的容器.我们都知道,程序是对于指令.数据及其组织形式的描述,而进程是程序的实体. 线程是轻量级 ...
- PHP 程序员学数据结构与算法之《栈》
“要成高手,必练此功”. 要成为优秀的程序员,数据结构和算法是必修的内容.而现在的Web程序员使用传统算法和数据结构都比较少,因为很多算法都是包装好的,不用我们去操心具体的实现细节,如PHP的取栈 ...
- Bootstrap <基础八>图片
Bootstrap 提供了三个可对图片应用简单样式的 class: .img-rounded:添加 border-radius:6px 来获得图片圆角. .img-circle:添加 border-r ...
- Java语言基础(八)
Java语言基础(八) 一.数学运算 + - * / % (1)凡是byte short char类型都按int类型的计算 看看上面的代码,为什么出错! 我已经将100转成byte类型,( ...
- ROS_Kinetic_12 ROS程序基础Eclipse_C++(三)usb camera
ROS_Kinetic_12 ROS程序基础Eclipse_C++(三)usb camera 软件包下载地址:https://github.com/bosch-ros-pkg/usb_cam 下载后, ...
- ROS_Kinetic_11 ROS程序基础Eclipse_C++(二)
ROS_Kinetic_11 ROS程序基础Eclipse_C++(二) 编写简单的Service和Client (C++): http://wiki.ros.org/cn/ROS/Tutorials ...
- ROS_Kinetic_10 ROS程序基础Eclipse_C++(一)
ROS_Kinetic_10 ROS程序基础Eclipse_C++(一) 编写简单的消息发布器和订阅器 (C++) http://wiki.ros.org/cn/ROS/Tutorials/Writi ...
- Java并发程序设计(二)Java并行程序基础
Java并行程序基础 一.线程的生命周期 其中blocked和waiting的区别: 作者:赵老师链接:https://www.zhihu.com/question/27654579/answer/1 ...
- 微信小程序基础
前言 什么是微信小程序,它是一种轻量级的APP,它与常规App来说,无需下载安装即可使用,它嵌于微信App中,要使用微信小程序你只需要搜索一下微信小程序的名称就好,如近期的"Google的画 ...
随机推荐
- jquery $.fn $.fx 的意思以及使用
$.fn是指jquery的命名空间,加上fn上的方法及属性,会对jquery实例每一个有效,下面简单为大家介绍下jquery $.fn $.fx到底是怎么一回事 $.fn是指jquery的命名空间,加 ...
- Mysql与Sql server,Sum函数跟Count函数
两者均是统计类函数,都不计算NULL字段!!! 单纯计算行数的话,count的效率比sum的效率高 MySQL SUM()函数介绍 SUM()函数用于计算一组值或表达式的总和,SUM()函数的语法如下 ...
- jquery——选项卡
下面是闭包做选项卡: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- (转)运维老鸟教你安装centos6.5如何选择安装包
运维老鸟教你安装centos6.5如何选择安装包 原文:http://blog.51cto.com/oldboy/1564620 近来发现越来越多的运维小伙伴们都有最小化安装系统的洁癖,因此,找老男孩 ...
- Hive 基本语法操练(六):Hive 的权限控制
Hive 的权限控制 Hive从0.10可以通过元数据控制权限.但是Hive的权限控制并不是完全安全的.基本的授权方案的目的是防止用户不小心做了不合适的事情. 为了使用Hive的授权机制,有两个参数必 ...
- java 核心技术 读后总结
总结 1.少用八进制,以及二进制. 那么就是直接用16进制或10进制吗?额,想当年有这样搞过,后面就uuid了. 2.>>>用0填充高位>>用符号位填充高位<< ...
- 记录下laravel 5.2的auth/logout路由工作不正常的问题
- Mysql5.7.6安装和主从配置手册
Mysql5.7.6+ 安装手册 linux server版本 1.下载 http://dev.mysql.com/downloads/mysql/#downloads 2. 检查库文件是否存在 ...
- php 04
前加加(++$a) 先运算后赋值 后加加($a++) 先赋值后运算 -- 前减减(--$a) 先运算后赋值 后减减($a--) 先赋值后运算 连接运算符(字符串运算符) . 神奇的米粒 1. 字符串和 ...
- restesay部署学习过程中遇到的问题
Exception starting filter org.jboss.resteasy.plugins.serer.servlet.Filter30Dispatcherjava.lang.Class ...