C/C++程序基础 (八)数据结构
- 非递归先序遍历
-
// 输出, 遍历左子树,遍历右子树 void firstOrder(Node* root) {stack<Node*> leftNodes;Node* curr = root;// deal each nodewhile(curr != NULL && !leftNodes.empty()){// deal with left subtreewhile(curr != NULL){cout << curr -> data << " ";// store curr node for reading right subtree leftNodes.push(curr);curr = curr -> left;}// deal with right subtreeif(!leftNodes.empty()){curr = leftNodes.top();leftNodes.pop();curr = curr -> right;}} }
-
- 非递归中序遍历
// 输出, 遍历左子树,遍历右子树 void middleOrder(Node* root) {stack<Node*> leftNodes;Node* curr = root;// deal each nodewhile(curr != NULL && !leftNodes.empty()){// deal with left subtreewhile(curr != NULL){// store curr node for reading right subtree leftNodes.push(curr);curr = curr -> left;}// deal with right subtreeif(!leftNodes.empty()){curr = leftNodes.top();leftNodes.pop();// cout curr nodecout << curr -> data << " ";curr = curr -> right;}} }
- 非递归后序遍历
// 输出, 遍历左子树,遍历右子树 void lastOrder(Node* root) {stack<Node*> leftNodes;stack<bool> tags;bool curr_tag = true;Node* curr = root;// deal each nodewhile(curr != NULL && !leftNodes.empty()){// deal with left subtreewhile(curr != NULL){// store curr node for reading right subtree leftNodes.push(curr);// mark have not seen right nodestags.push(false);curr = curr -> left;}// deal with right subtreeif(!leftNodes.empty()){curr = leftNodes.top();curr_tag = tags.top();tags.pop();if(curr_tag){cout << curr -> data << " ";leftNodes.pop();// have already dealt right subtreep = NULL;}else{curr = curr -> right;// mark has dealt with rightsubtreetags.push(true); }}} }
- 二叉排序树:左<父<右
- 哈弗曼树
- 哈夫曼编码:带权路径最短
- 构建方法:从最远端构建
- 平衡二叉(搜索)树:每个节点的左右子树深度差的绝对值小于等于1。
- 一种实现:红黑树
- 基本失衡情况:左左(右旋),右右(左旋),左右,右左。
- 红黑树
- 节点:红色或黑色。根节点:黑色。叶节点:黑色。红色节点的孩子为黑色。根节点到其每个叶子节点的所有路径包含相同数目的黑色节点。
- 等待补充
- 完全二叉树和满二叉树
- 完全二叉树,集中在左边
- 满二叉树,没有叶子节点
转载于:https://www.cnblogs.com/niuxu18/p/note_interview_8.html
C/C++程序基础 (八)数据结构相关推荐
- 程序基础:数据结构(郝斌讲解)(一)
开始写博客,目标一周一个项目总结,可能是一个具体的问题的求解方法,也可能是一周的学习笔记,还可能是一个算法的实现. 从2013年开始补起来 本周学习重点 数据结构 什么是数据结构? 数据结构概述:数据 ...
- 程序基础:数据结构(郝斌讲解)(2)
数据结构(五) 指针的知识. 指针的重要性 指针是c语言的灵魂 定义 地址:内存单元的编号. (内存是cpu唯一可以直接访问的大型存储器件,内存和cpu之间有三种线,地址线,控制线,地址线.) 从零开 ...
- 程序基础:数据结构(郝斌讲解)(4)
结构体使用概述: 结构体: 为什么会出现结构体? 复杂事物的表现方法: 没有方法的类. 为了表示一些复杂的数据,而普通的基本类型变量无法满足要求. 结构体是用户根据实际需要自己定义的复合数据类型. 分 ...
- 微信原生小程序基础架构
文章目录 微信原生小程序基础架构 一.基本目录结构 二.登录鉴权部分 三.位置授权部分 四.版本升级部分 五.工具部分 MD5加密 六.系统信息部分 七.缓存处理 八.CSS兼容问题处理与公共样式 九 ...
- java负数右移_收入囊中篇---Java程序基础(二)
前言: 本篇是接着上一篇更新的,如果没有阅读上一篇的话,可以查阅或回顾一下. 1.收入囊中篇---Java基础必备知识(一) 2.收入囊中篇---Java程序基础(二) Java程序基础目录 1.Ja ...
- php学数据结构,PHP 程序员学数据结构与算法之《栈》
介绍 "要成高手,必练此功". 要成为优秀的程序员,数据结构和算法是必修的内容.而现在的Web程序员使用传统算法和数据结构都比较少,因为很多算法都是包装好的,不用我们去操心具体的实 ...
- Scratch3.0——助力新进程序员理解程序(案例八、等差数列计算1)
Scratch3.0--助力新进程序员理解程序(案例八.等差数列计算1) 前言 一般来说,针对6-18岁的少年儿童开展的编程教育,现在,最常见的形式是线上和线下模式相结合的课外培训. 这里我用作让大朋 ...
- Socket基础八:网络IO模型的应用
Socket基础八:网络IO模型的应用 作者:刘磊 2020.4.27 参考书目:<Windows网络编程>刘琰等著 一.实验目的 1)掌握WindowsI/O操作的基本原理. 2)掌握阻 ...
- C++基础-介绍·数据结构·排序·算法
C++基础-介绍·数据结构·排序·算法 特点 使用方向 RPC Data Struct 数据结构 栈 Stack 内存分配中的栈 队列 List 数组 Array 链表 LinkTable 树 Tre ...
- c语言程序设计与数据结构清华版,清华大学出版社-图书详情-《程序设计基础与数据结构》...
程序设计基础与数据结构是信息管理与信息系统专业必修的一门核心课程,该课程的目的是培养学生的程序设计理念,使学生能掌握程序设计的基本方法,了解最常用数据结构的逻辑特性.存储表示以及对这些数据结构的操作算 ...
最新文章
- 2022-2028年中国四氟化碳产业研究及前瞻分析报告
- PHP如何连接MySQL数据库
- 如果–否则为编码风格最佳实践
- CIFAR-10 dataset 的下载与使用
- Axis2;wsdl生成客户端和serverJava代码
- mysql2800_mysql error 1045 (2800):。。 'root'@'localhost' (using password:YES)
- strings命令(Win、Linux均可适用)
- 超越村后端开发(7:修改完善代码(持续更新))
- 9day条件语句和基本数据类型
- 95 后程序员一出校门就拿年薪 32 万?
- matlab 可变参数与默认参数设置
- C语言_写简易吃豆人小游戏
- php网页 背景图片,CSS实现网页背景图片自适应全屏详解
- Linux中shell的ls,linux系统shell中ls指令
- 【VIO笔记(学习VINS的必备基础)】第五讲(1/2) 手写VIO后端
- 一个模拟斗地主的小程序
- win10 系统更新服务器出错怎么办,win10系统更新出错的两种解决方法
- 浅谈 FFT (终于懂一点了~~)
- LeetCode695. 岛屿的最大面积———海岛
- 国有建筑企业数字化转型整体解决方案
热门文章
- E.Text Editor (Gym 101466E + 二分 + kmp)
- java集合类学习笔记之LinkedHashMap
- Python全栈开发:RabbitMQ/Redis/Memcache/SQLAlchemy
- CentOS7安装Nagios并配置出图详解
- MySql技巧个人笔记
- KlayGE 4.3开发计划
- python基本语法积累~
- mysql 5.7重新设置密码_mysql 5.7 安装及修改/重置密码
- vue导航栏跳转路由
- 关于 通过http请求 无法访问Linux下的ftp服务的解决办法!