C++二叉链表遍历理论基础
本节主要研究二叉树中二叉链表的先序遍历原理。基础理论知识有二叉链表的构造原理余递归的思想。
根据递归的思想,我们首先应当建立二叉链表的结点类,包括成员变量data域,指向左右子树的指针,并对链表节点类的构造函数进行重载。其次,我们应当建立二叉链表类,包括成员变量指向根节点的头指针,代表二叉树属性的一些参数,和诸多类内函数。由于本节讲述的是先序遍历方法,因此类内函数应当由先序遍历方法函数。又如,本案例涉及对结点数据域数值的打印输出,因此应当另写函数对数据域的值进行打印操作。
二叉链表建立好后,可以通过调用类内先序遍历函数进行先序遍历的开始。随着遍历进行,函数会不挺访问和自己类一样的二叉链表,不断调用自己,实现了递归。
先序遍历的函数的构思:
1. 判断指针指向的结点是否为空,若为空,返回上一级;
2. 不是空,打印输出该节点的数据域数值
3. 将指针更新为指向该结点的左子树的指针
4. 将指针更新为指向该结点的右子树的指针
重点:我第一次想不明白,将指针更新为指向左子树指针后,会发生什么。其实,更新指针后,依然会进行1,2,3,4四个操作,直到指针为NULL或者子函数体执行完毕。它永远会返回到上一级调用函数内部。因此,二叉链表的遍历是“跳来跳去”的
接下来的中序遍历和后序遍历,和先序遍历的函数非常相似。只不过是cout语句的位置不同。除此之外,对于一棵树,三种访问方法的访问总路线很相似,只不过是各个结点的访问时机不同。对于每一个结点,均要路过三次,第一次路过即打印:先序,第二次路过打印:中序,否则:后序
时间复杂度
C++二叉链表遍历理论基础相关推荐
- C++非递归算法遍历二叉链表
递归的二叉链表遍历基于类自身函数的自我调用,而二叉链表的非递归操作,基于栈的入栈与弹栈.将中序遍历作为例子:指针访问到结点后,应先记住结点数值入栈,再往左边便利.假如指针为空,弹栈,最后将指针赋值给右 ...
- 数据结构-二叉链表的结构与实现
目录 一.引言 二.什么是二叉链表 三.二叉链表的结构 四.二叉链表的实现 1. 创建二叉链表 2. 遍历二叉链表 3. 插入节点 4. 删除节点 五.应用场景 六.总结 七.代码示例 一.引言 数据 ...
- 二叉树的二叉链表存储结构构建以及先序遍历
#include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR -1 typedef int TElemTy ...
- 数据结构:(翻转二叉树) 若二叉树采用二叉链表作存储结构,要交换其所有分支结点的左右子树的位置,采用()遍历方法最合适
题目 若二叉树采用二叉链表作存储结构,要交换其所有分支结点的左右子树的位置,采用()遍历方法最合适?(北京航空航天大学1999,北京工业大学2016) A. 前序 B. 中序 C. 后序 D. 层次 ...
- C语言递归实现二叉树(二叉链表)的三种遍历和销毁操作(实验)
今天写的是二叉树操作的实验,这个实验有三个部分: ①建立二叉树,采用二叉链表结构 ②先序.中序.后续遍历二叉树,输出节点值 ③销毁二叉树 二叉树的节点结构定义 typedef struct BiTNo ...
- 3004基于二叉链表的二叉树的双序遍历(附题意解释)
描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法实现该二叉树的双序遍历(双序遍历是指对于二叉树的每一个结点来说,先访问这个结点,再按双序遍历它的左子树,然后再一次 ...
- 3008基于二叉链表的二叉树的遍历(附可能的WA解释)
描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写三个递归算法分别实现二叉树的先序.中序和后序遍历. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为'0'时 ...
- 建立、遍历二叉树(二叉链表)
建立二叉树: 由于先序.中序.后序遍历的任何一个遍历结果单独都不能唯一确定一颗二叉树,因此不能直接使用其中任何一个遍历结果来构造二叉树(原因是不能确定左右子树的大小(节点数),或者说不知道子树的结束位 ...
- C++二叉链表的层次遍历
二叉链表可以用递归算法实现先序遍历,中序遍历和后序遍历,也可以利用栈进行先序遍历,中序遍历和后序遍历.同时,二叉链表也可以借助队列实现层次遍历,基本思想如下: 1. 创建二叉链表,创建对咧 2. 将只 ...
- DS007-二叉树-二叉链表表示法-先根-中根-后根遍历
本篇介绍二叉树的二叉链表表示法,及其先.中.后根遍历. 以下面这棵二叉树为例. #include "stdafx.h"#include<iostream> using ...
最新文章
- 2020年,那些「引爆」了ML社区的热门论文、库和基准
- 使用VS2010调用matlab的mat格式文件
- 谈谈对搜索技术Elastic SearchLucene的理解
- php mongo分页查询,PHP操作Mongodb之高级查询篇
- linux mkfs 源码,mkfs工具怎么移植到嵌入式平台下面
- PHP实现归治算法,PHP排序算法系列之归并排序详解
- jsp2自定义标签开篇
- 基于报文地址的策略路由配置示例
- 使用 bind 搭建DNS 服务器
- Android笔记 对话框demo大全
- 狼来了!中国房地产的实质--比喻太生动了
- CDHtmlDialog探索----WebBrowser扩展和网页Javascript错误处理
- Springboot中使用JWT
- 10本Java架构师必读书籍推荐
- 操作系统 ucore lab1实验报告
- 微信扫一扫下载apk解决方案
- 戴尔服务器引导盘装2008,DELL R720服务器安装Windows Server 2008 R2系统的图文详解
- [总结]IOS开发工程师之路
- CHIL-SQL-UCASE() 函数
- Maven导入jar包失败问题,lastUpdated问题解决
热门文章
- 华为2022年软挑赛初赛试题及初级代码(成渝赛区)
- Python游戏编程入门-打飞机
- python加减乘除计算器 eval_Python计算器(模拟eval)
- 社工库源码mysql_社工库源码
- Windows 10 Enterprise 2015 LTSB 2019_免费下载:Intouch软件、Windows操作系统、SQL数据库,Office办公、VB6.0、C#、虚拟机、PLC...
- 学习笔记:SSH端口转发的三种方式
- 计算机科学概论:计算机科学中的百科全书
- CCF中国计算机学会推荐国际学术期刊与会议
- Blender源代码编译(VS2019、win64_vc15)
- CodeForces914 D.Bash and a Tough Math Puzzle(线段树)