> 引言

通过递归的方式,实现遍历每一个元素的目的。
该算法分成三种除访问节点时机不同外,其他完全相同(访问路径完全相同)的算法(稍后作解释)。分别为先序遍历(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)。

二叉树的遍历算法(一 递归算法)相关推荐

  1. 重拾算法(3)——用458329个测试用例全面测试二叉树和线索二叉树的遍历算法

    重拾算法(3)--用458329个测试用例全面测试二叉树和线索二叉树的遍历算法 在"上一篇"和"上上一篇"中,我给出了二叉树和线索二叉树的遍历算法.给出算法容易 ...

  2. 【swjtu】数据结构实验6_二叉树的遍历算法

    实验内容及要求: 编写程序,用先序递归遍历法建立二叉树的二叉链表存储结构,然后输出其先序.中序.后序以及层次遍历结点访问次序.其中层次遍历的实现需使用循环队列.二叉树结点数据类型建议选用字符类型. 实 ...

  3. 二叉树的遍历(算法导论第三版12.1-4)(包含先序遍历,后序遍历和中序遍历)

    二叉树的遍历(算法导论第三版12.1-4) 1⃣️先序遍历 template<typename T> void preorder_tree_wald(BinaryTreeNode<T ...

  4. html二叉树遍历,二叉树的遍历算法

    二叉树的遍历算法 概述 二叉树作为一个基础的数据结构,遍历算法作为一个基础的算法,两者结合当然是经典的组合了.很多题目都会有 ta 的身影,有直接问二叉树的遍历的,有间接问的.比如要你找到树中满足条件 ...

  5. 二叉树的遍历算法(三级)

    知道二叉树在计算机里面是怎么存储的,有顺序存储结构,采用数组存储,也有链式存储结构,采用二叉链表,或者采用三叉链表,那采用链式存储结构更多一点,下面我们会讲二叉树在计算机里的实现,就是链式存储结构的二 ...

  6. Python实现: 常用排序算法 二叉树的遍历算法

    转载自:http://www.cnblogs.com/alex3714/articles/5474411.html点击打开链接,感谢原作者,如有侵权,联系删除 本节内容 算法定义 时间复杂度 空间复杂 ...

  7. 二叉树层次遍历算法 python_二叉树的遍历详解:前、中、后、层次遍历(Python实现)...

    二叉树的遍历详解:前.中.后.层次遍历(Python实现) 二叉树是一种常见的数据结构,而它的常见遍历方法有前序遍历.中序遍历.后续遍历.层次遍历--掌握这几种遍历方法是很有必要的. 假设我们二叉树节 ...

  8. 二叉树创建及遍历算法(递归及非递归)(转)

    //二叉树处理头文件 //包括二叉树的结构定义,二叉树的创建,遍历算法(递归及非递归), /* 作者:成晓旭 时间:2001年10月7日(18:49:38-20:00:00) 内容:完成二叉树创建,二 ...

  9. 数据结构 第七章 实验题2 实现二叉树的各种遍历算法

    实验题目:     实现二叉树各种遍历算法 实验目的:      领会二叉树的各种遍历过程以及遍历算法设计 实验内容:       设计程序,实现二叉树的先序遍历.中序遍历和后序遍历的       递 ...

最新文章

  1. Android学习笔记之AndroidManifest.xml文件解析
  2. HTML5(W3CSchool版).chm
  3. 揭开雷达的面纱(科普)接收机
  4. dedecms批量删除文档关键词可以吗
  5. 一个追求高效的学习者手机里装有哪些APP?(转)
  6. VSCode自定义代码片段3——url大全
  7. UIView设置背景渐变色
  8. 自定义 Spark item 的渲染器
  9. List 列表中的对象在循环中的声明问题
  10. SAP License:SAP职场处好人际关系的六大秘籍
  11. eclipse 离线安装python开发工具 PyDev
  12. v2ex热帖:面了几个程序员(3-5年),发现他们对MySQL的distinct关键字有误解......
  13. 拓端tecdat|R语言Bass模型进行销售预测
  14. 牛客练习赛89 第一题(牛牛吃米粒)
  15. 回顾15个月的工作经历
  16. 【定制项目】【M13】【数据监控 + 数据分析 + 可视化大屏】- 关键技术 python flask + pandas + echarts + excel
  17. cadence使用教程
  18. 苹果照片未删却不见了_手机删除的照片如何恢复?不得不说这方法好!
  19. 量子计算基础——矩阵语言
  20. 移远 EC200S 模组(4G Cat.1 通信模组)AT指令测试 TCP/UDP 通信过程

热门文章

  1. idea创建包时不分级展示的解决方案
  2. Python数据库sqlite3详解(python使用sqlite3数据库编程案例)
  3. Matlab/Simulink之STM32开发
  4. 网页设计色彩搭配原则
  5. 格密码开源库PALISADE的使用
  6. SAP Data Service 4.2 下载及安装教程
  7. VISSIM4.30安装
  8. GRUB--多系统启动引导器
  9. Python运维开发(CMDB资产管理系统)--环境部署(上)
  10. Live2D Web端实现