本节主要研究二叉树中二叉链表的先序遍历原理。基础理论知识有二叉链表的构造原理余递归的思想。

根据递归的思想,我们首先应当建立二叉链表的结点类,包括成员变量data域,指向左右子树的指针,并对链表节点类的构造函数进行重载。其次,我们应当建立二叉链表类,包括成员变量指向根节点的头指针,代表二叉树属性的一些参数,和诸多类内函数。由于本节讲述的是先序遍历方法,因此类内函数应当由先序遍历方法函数。又如,本案例涉及对结点数据域数值的打印输出,因此应当另写函数对数据域的值进行打印操作。

二叉链表建立好后,可以通过调用类内先序遍历函数进行先序遍历的开始。随着遍历进行,函数会不挺访问和自己类一样的二叉链表,不断调用自己,实现了递归。

先序遍历的函数的构思:

1. 判断指针指向的结点是否为空,若为空,返回上一级;

2. 不是空,打印输出该节点的数据域数值

3. 将指针更新为指向该结点的左子树的指针

4. 将指针更新为指向该结点的右子树的指针

重点:我第一次想不明白,将指针更新为指向左子树指针后,会发生什么。其实,更新指针后,依然会进行1,2,3,4四个操作,直到指针为NULL或者子函数体执行完毕。它永远会返回到上一级调用函数内部。因此,二叉链表的遍历是“跳来跳去”的

接下来的中序遍历和后序遍历,和先序遍历的函数非常相似。只不过是cout语句的位置不同。除此之外,对于一棵树,三种访问方法的访问总路线很相似,只不过是各个结点的访问时机不同。对于每一个结点,均要路过三次,第一次路过即打印:先序,第二次路过打印:中序,否则:后序

时间复杂度

C++二叉链表遍历理论基础相关推荐

  1. C++非递归算法遍历二叉链表

    递归的二叉链表遍历基于类自身函数的自我调用,而二叉链表的非递归操作,基于栈的入栈与弹栈.将中序遍历作为例子:指针访问到结点后,应先记住结点数值入栈,再往左边便利.假如指针为空,弹栈,最后将指针赋值给右 ...

  2. 数据结构-二叉链表的结构与实现

    目录 一.引言 二.什么是二叉链表 三.二叉链表的结构 四.二叉链表的实现 1. 创建二叉链表 2. 遍历二叉链表 3. 插入节点 4. 删除节点 五.应用场景 六.总结 七.代码示例 一.引言 数据 ...

  3. 二叉树的二叉链表存储结构构建以及先序遍历

    #include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR -1 typedef int TElemTy ...

  4. 数据结构:(翻转二叉树) 若二叉树采用二叉链表作存储结构,要交换其所有分支结点的左右子树的位置,采用()遍历方法最合适

    题目 若二叉树采用二叉链表作存储结构,要交换其所有分支结点的左右子树的位置,采用()遍历方法最合适?(北京航空航天大学1999,北京工业大学2016) A. 前序 B. 中序 C. 后序 D. 层次 ...

  5. C语言递归实现二叉树(二叉链表)的三种遍历和销毁操作(实验)

    今天写的是二叉树操作的实验,这个实验有三个部分: ①建立二叉树,采用二叉链表结构 ②先序.中序.后续遍历二叉树,输出节点值 ③销毁二叉树 二叉树的节点结构定义 typedef struct BiTNo ...

  6. 3004基于二叉链表的二叉树的双序遍历(附题意解释)

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法实现该二叉树的双序遍历(双序遍历是指对于二叉树的每一个结点来说,先访问这个结点,再按双序遍历它的左子树,然后再一次 ...

  7. 3008基于二叉链表的二叉树的遍历(附可能的WA解释)

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写三个递归算法分别实现二叉树的先序.中序和后序遍历. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为'0'时 ...

  8. 建立、遍历二叉树(二叉链表)

    建立二叉树: 由于先序.中序.后序遍历的任何一个遍历结果单独都不能唯一确定一颗二叉树,因此不能直接使用其中任何一个遍历结果来构造二叉树(原因是不能确定左右子树的大小(节点数),或者说不知道子树的结束位 ...

  9. C++二叉链表的层次遍历

    二叉链表可以用递归算法实现先序遍历,中序遍历和后序遍历,也可以利用栈进行先序遍历,中序遍历和后序遍历.同时,二叉链表也可以借助队列实现层次遍历,基本思想如下: 1. 创建二叉链表,创建对咧 2. 将只 ...

  10. DS007-二叉树-二叉链表表示法-先根-中根-后根遍历

    本篇介绍二叉树的二叉链表表示法,及其先.中.后根遍历. 以下面这棵二叉树为例. #include "stdafx.h"#include<iostream> using ...

最新文章

  1. 2020年,那些「引爆」了ML社区的热门论文、库和基准
  2. 使用VS2010调用matlab的mat格式文件
  3. 谈谈对搜索技术Elastic SearchLucene的理解
  4. php mongo分页查询,PHP操作Mongodb之高级查询篇
  5. linux mkfs 源码,mkfs工具怎么移植到嵌入式平台下面
  6. PHP实现归治算法,PHP排序算法系列之归并排序详解
  7. jsp2自定义标签开篇
  8. 基于报文地址的策略路由配置示例
  9. 使用 bind 搭建DNS 服务器
  10. Android笔记 对话框demo大全
  11. 狼来了!中国房地产的实质--比喻太生动了
  12. CDHtmlDialog探索----WebBrowser扩展和网页Javascript错误处理
  13. Springboot中使用JWT
  14. 10本Java架构师必读书籍推荐
  15. 操作系统 ucore lab1实验报告
  16. 微信扫一扫下载apk解决方案
  17. 戴尔服务器引导盘装2008,DELL R720服务器安装Windows Server 2008 R2系统的图文详解
  18. [总结]IOS开发工程师之路
  19. CHIL-SQL-UCASE() 函数
  20. Maven导入jar包失败问题,lastUpdated问题解决

热门文章

  1. 华为2022年软挑赛初赛试题及初级代码(成渝赛区)
  2. Python游戏编程入门-打飞机
  3. python加减乘除计算器 eval_Python计算器(模拟eval)
  4. 社工库源码mysql_社工库源码
  5. Windows 10 Enterprise 2015 LTSB 2019_免费下载:Intouch软件、Windows操作系统、SQL数据库,Office办公、VB6.0、C#、虚拟机、PLC...
  6. 学习笔记:SSH端口转发的三种方式
  7. 计算机科学概论:计算机科学中的百科全书
  8. CCF中国计算机学会推荐国际学术期刊与会议
  9. Blender源代码编译(VS2019、win64_vc15)
  10. CodeForces914 D.Bash and a Tough Math Puzzle(线段树)