二叉树的遍历算法(一 递归算法)
> 引言
通过递归的方式,实现遍历每一个元素的目的。
该算法分成三种除访问节点时机不同外,其他完全相同(访问路径完全相同)的算法(稍后作解释)。分别为先序遍历(DLR),中序遍历(LDR),后序遍历(LRD)。针对三种情况,拿DLR为例做一下解释。
**访问次序:**首先访问根节点,其次访问左子树,最后访问右子树;
**
> 代码实现
**
1.分析
如果树为空,返回上一级,无操作。
如果树非空。 首先访问根节点,其次访问左子树,最后访问右子树。
2.上代码
Status PreOrderTraverse(BiTree T){if(T==NULL) return OK;//如果树为空,直接返回else{visit(T);//访问根节点PreOrderTraverse(T->lchild);//访问左子树PreOrderTraverse(t->rchild);//访问右子树}
}
举例
通过递归实现对二叉树的遍历,看似简单,事实上,不容易理解。接个例子吧!
问题是如何通过先序递归算法实现对该二叉树的访问。
1.对二叉树进行还原。
(我说的还原是指不全二叉树,使二叉树最深层全为空)
2.进行分析。
(图中省略部分标签)
**
上述情况仅为前序遍历,现在对三种不同情况的代码分别列出进行对比
。**
//DLR
Status PreOrderTraverse(BiTree T){if(T==NULL) return OK;//如果树为空,直接返回else{visit(T);//访问根节点PreOrderTraverse(T->lchild);//访问左子树PreOrderTraverse(t->rchild);//访问右子树}
}
//LDR
Status InOrderTraverse(BiTree T){if(T==NULL) return OK;//如果树为空,直接返回else{InOrderTraverse(T->lchild);//访问左子树visit(T);//访问根节点InOrderTraverse(t->rchild);//访问右子树}
}
//LRD
Status LaOrderTraverse(BiTree T){if(T==NULL) return OK;//如果树为空,直接返回else{LaOrderTraverse(T->lchild);//访问左子树LaOrderTraverse(t->rchild);//访问右子树visit(T);//访问根节点}
}
从代码中不难看出,如果没有visit(T),三种代码一样。所以在开篇说,其实这是一种一模一样的算法。
时间复杂度:O(n)
有n个结点,把每个结点遍历一遍。
空间复杂度:O(n)
实现递归算法,系统中自动生成一个栈。在栈中,**保存路过而没访问的元素**,当访问之后,再将元素自动拿出。**最坏的情况**是n个结点单支存在(即除子叶外,度数全为1),因此,空间复杂度为O(n)。
二叉树的遍历算法(一 递归算法)相关推荐
- 重拾算法(3)——用458329个测试用例全面测试二叉树和线索二叉树的遍历算法
重拾算法(3)--用458329个测试用例全面测试二叉树和线索二叉树的遍历算法 在"上一篇"和"上上一篇"中,我给出了二叉树和线索二叉树的遍历算法.给出算法容易 ...
- 【swjtu】数据结构实验6_二叉树的遍历算法
实验内容及要求: 编写程序,用先序递归遍历法建立二叉树的二叉链表存储结构,然后输出其先序.中序.后序以及层次遍历结点访问次序.其中层次遍历的实现需使用循环队列.二叉树结点数据类型建议选用字符类型. 实 ...
- 二叉树的遍历(算法导论第三版12.1-4)(包含先序遍历,后序遍历和中序遍历)
二叉树的遍历(算法导论第三版12.1-4) 1⃣️先序遍历 template<typename T> void preorder_tree_wald(BinaryTreeNode<T ...
- html二叉树遍历,二叉树的遍历算法
二叉树的遍历算法 概述 二叉树作为一个基础的数据结构,遍历算法作为一个基础的算法,两者结合当然是经典的组合了.很多题目都会有 ta 的身影,有直接问二叉树的遍历的,有间接问的.比如要你找到树中满足条件 ...
- 二叉树的遍历算法(三级)
知道二叉树在计算机里面是怎么存储的,有顺序存储结构,采用数组存储,也有链式存储结构,采用二叉链表,或者采用三叉链表,那采用链式存储结构更多一点,下面我们会讲二叉树在计算机里的实现,就是链式存储结构的二 ...
- Python实现: 常用排序算法 二叉树的遍历算法
转载自:http://www.cnblogs.com/alex3714/articles/5474411.html点击打开链接,感谢原作者,如有侵权,联系删除 本节内容 算法定义 时间复杂度 空间复杂 ...
- 二叉树层次遍历算法 python_二叉树的遍历详解:前、中、后、层次遍历(Python实现)...
二叉树的遍历详解:前.中.后.层次遍历(Python实现) 二叉树是一种常见的数据结构,而它的常见遍历方法有前序遍历.中序遍历.后续遍历.层次遍历--掌握这几种遍历方法是很有必要的. 假设我们二叉树节 ...
- 二叉树创建及遍历算法(递归及非递归)(转)
//二叉树处理头文件 //包括二叉树的结构定义,二叉树的创建,遍历算法(递归及非递归), /* 作者:成晓旭 时间:2001年10月7日(18:49:38-20:00:00) 内容:完成二叉树创建,二 ...
- 数据结构 第七章 实验题2 实现二叉树的各种遍历算法
实验题目: 实现二叉树各种遍历算法 实验目的: 领会二叉树的各种遍历过程以及遍历算法设计 实验内容: 设计程序,实现二叉树的先序遍历.中序遍历和后序遍历的 递 ...
最新文章
- Android学习笔记之AndroidManifest.xml文件解析
- HTML5(W3CSchool版).chm
- 揭开雷达的面纱(科普)接收机
- dedecms批量删除文档关键词可以吗
- 一个追求高效的学习者手机里装有哪些APP?(转)
- VSCode自定义代码片段3——url大全
- UIView设置背景渐变色
- 自定义 Spark item 的渲染器
- List 列表中的对象在循环中的声明问题
- SAP License:SAP职场处好人际关系的六大秘籍
- eclipse 离线安装python开发工具 PyDev
- v2ex热帖:面了几个程序员(3-5年),发现他们对MySQL的distinct关键字有误解......
- 拓端tecdat|R语言Bass模型进行销售预测
- 牛客练习赛89 第一题(牛牛吃米粒)
- 回顾15个月的工作经历
- 【定制项目】【M13】【数据监控 + 数据分析 + 可视化大屏】- 关键技术 python flask + pandas + echarts + excel
- cadence使用教程
- 苹果照片未删却不见了_手机删除的照片如何恢复?不得不说这方法好!
- 量子计算基础——矩阵语言
- 移远 EC200S 模组(4G Cat.1 通信模组)AT指令测试 TCP/UDP 通信过程