基础的数据结构分享完了,开始分享高级算法了。

一、背景

本来之前写过《数组》、《链表》、《队列与栈》、《哈希》、《二分查找》,后面就开始写树相关的文章了。

上篇文章本要介绍《二叉树》的,结果先介绍《二叉搜索树》了。
今天把《二叉树》的知识补上。

二、基础知识

树是一种经常用到的数据结构,用来模拟具有树状结构性质的数据集合。

树里的每一个节点有一个根植和一个包含所有子节点的列表。

二叉树是一种更为典型的树树状结构。
如它名字所描述的那样,二叉树是每个节点最多有两个子树的树结构,通常子树被称作“左子树”和“右子树”。

三、树的遍历

二叉树一般有三种遍历:前序遍历、中序遍历、后续遍历。

前序遍历首先访问根节点,然后遍历左子树,最后遍历右子树。
中序遍历是先遍历左子树,然后访问根节点,然后遍历右子树。
后序遍历是先遍历左子树,然后遍历右子树,最后访问树的根节点。

通常来说,使用递归进行这三种遍历都是非常简单的事情。
而使用迭代的方法实现这三种遍历,就需要自己维护栈这个数据结构了。

二叉树的前序遍历相对还算简单,对于当前树根节点,直接输出答案。
代码如下。

而对于中序和后续遍历,则存在一个问题:当前树的根节点怎么保存。
出栈的时候,我们怎么知道这是一个尚未处理的子树,还是已经处理的子树。

如果可以修改树的节点值,那处理过的节点置为空即可。

例如中序遍历的代码如下:

后序的代码和中序很类似,这里就不上代码了。

有时候,我们需要一层层的遍历树。
这个其实就是常见的 广度优先搜索,简称 BFS。
我们一般使用队列这个数据结构来实现 BFS,在《队列》系列中已经教过大家了。

四、相关实践

树的问题一般有两种:一种是递归到叶子节点就确定一个答案的。
一种是根据两个儿子的状态,再加当前节点的状态,综合得到一个答案。

比如树的最大深度,两种方法都可以。

对于判断树是否树对称二叉树,则只能使用第二种方法。

而对于是否存在一条根到叶子节点的路径和等于指定数字的问题,则使用第一种方法。

五、最后

好了,二叉树的基础知识相信你了解的差不多了。随后我会把这些问题的题号留言放出来。
另外,对于其他文章,如果你发现对应的题号没放出来,可以留言告诉我,可能我之前忘记了。

-EOF-

本文首发于公众号:天空的代码世界

个人微信号:tiankonguse

QQ算法群:165531769(不止算法)

知识星球:不止算法

注:每次我都会把对应的练习题地址发送到群里,你想学算法的话做一下这些题吧。

给个好看

一起学习算法

数据结构二叉树的建立代码_二叉树就是这么简单相关推荐

  1. 二叉树遍历代码_二叉树的题,就那几个框架,枯燥至极

    刷题认准labuladong 东哥带你手把手撕力扣? 点击下方卡片即可搜索? JSON 的运用非常广泛,比如我们经常将变成语言中的结构体序列化成 JSON 字符串,存入缓存或者通过网络发送给远端服务, ...

  2. java二叉树求权值_二叉树中的权值是什么?

    展开全部 二叉树中的权值就是对叶子结点赋予的一个有意义的数量值. 一棵深度为k,且有2^k-1个节点的二叉树,32313133353236313431303231363533e58685e5aeb93 ...

  3. 二叉树深度和高度_二叉树的高度和深度

    二叉树深度和高度 In this tutorial, we will learn how to find height and depth of binary tree with program im ...

  4. 二叉树线索化示意图_二叉树的线索化

    二叉树是一种非线性结构,遍历二叉树几乎都是通过递归或者用栈辅助实现非递归的遍历.二叉树作为存储结构时,一个节点只能获取节点的左孩子和右孩子,不能直接得到节点的任一遍历序列的前驱或者后继.为了保存这种在 ...

  5. Java二叉树逆序遍历_二叉树遍历小结

    二叉树遍历小结 声明 0 二叉树遍历概述 二叉树遍历:按照既定序,对每个节点仅访问一次: 二叉树非递归遍历思想:参考这篇博文,核心思想是存在重合元素的局部有序保证整体有序,由于二叉树的结构特点,二叉树 ...

  6. 掷骰子python代码_通过构建一个简单的掷骰子游戏去学习怎么用 Python 编程

    不论是经验丰富的老程序员,还是没有经验的新手,Python 都是一个非常好的编程语言. Image by : opensource.com Python 是一个非常流行的编程语言,它可以用于创建桌面应 ...

  7. 前序遍历二叉树代码_二叉树遍历、二叉树深度、代码示例,一点课堂(多岸学院)...

    二叉树的遍历 ★★★★★TreeNode 节点/ Definition for a binary tree node. /public class TreeNode {int val;TreeNode ...

  8. 二叉树期权定价python代码_欧式和美式期权的二叉树和Greek(1)——PYTHON

    欧式和美式期权(Option)是最基础的衍生证卷.如何定价是初学金融工程者的必备知识.二叉树的又是最简单但是容易理解的工具.在网上有期权计算器可以很容易得到.但是练习自己编写还是有收益的. 欧式期权的 ...

  9. 二叉树线索化示意图_二叉树的线索化算法思想详解

    二叉树的线索化,这几天以来我很难掌握,今天终于想通了,哈哈,首先我们来看看二叉树线索化之后会变成什么样子,这里我们以图中的二叉树为例,图如下: 画的太糙,各位看官讲究着看吧- -.所谓二叉树的线索化, ...

  10. 二叉树后序遍历_二叉树后序遍历非递归实现

    二叉树的后序遍历非递归实现是三种遍历实现里面最复杂的一种了. 后序遍历的顺序是左节点-右节点-根节点,因为二叉树每个节点只有指向子节点的指针而没有指向父节点的指针,因此我们需要一个额外的变量来记录是否 ...

最新文章

  1. openssl私有ca创建
  2. linux下得到date命令,linux下date命令获得今天日期的用法
  3. 信息学奥赛一本通(1189:Pell数列)
  4. c语言学习-自定义函数并调用将一个字符串中的小写字母改为大写字母(数组元素和数组名作函数参数)
  5. mysql存储过程switch_Mysql存储过程从0开始(上)
  6. vue视频教程大全下载
  7. docker安装nginx并且部署前端项目
  8. 图灵之谜-《艾伦·图灵传》序
  9. PB50打印机测试结果:霍尼韦尔 、intermec 打印机不能买
  10. 在线渐变配色网站分享
  11. 飞信WEB接口的一个返回网页C#处理源码
  12. [kernel]linux内核基础: 版本、源码、编译与调试
  13. 根因定位论文:Root Cause Analysis of Anomalies of Multitier Services in Public Clouds
  14. rdt不同版本(rdt1.0,rdt2.0,rdt2.1,rdt2.2,rdt3.0)协议的特点以及发送端接收端的FSM
  15. linux cpan 参数配置,Perl学习笔记之CPAN使用介绍
  16. ConvE:Convolutional 2D Knowledge Graph Embeddings
  17. 构建自己的gym训练环境
  18. 《数据库系统概论》复习笔记
  19. 一文读懂手机直播和摄像机直播的区别
  20. Revit数据导入SuperMap iDesktop方法详解

热门文章

  1. 9.PHP核心技术与最佳实践 --- memcache
  2. 9.运输层(3)---TCP
  3. 15.explain
  4. linux 文件同步脚本,Linux rsync同步文件脚本
  5. 洛谷 P1993 小K的农场 解题报告
  6. How-to: Do Statistical Analysis with Impala and R
  7. 如何使用maven打包
  8. mysql批量插入之提高插入效率
  9. 关于UIAlertAction如何修改sheet上的字体颜色
  10. vNext之旅(1):从概念和基础开始