一、前序遍历

  访问顺序:先根节点,再左子树,最后右子树;上图的访问结果为:GDAFEMHZ。

  1)递归实现

  1. public void preOrderTraverse1(TreeNode root) {
  2. if (root != null) {
  3. System.out.print(root.val + "->");
  4. preOrderTraverse1(root.left);
  5. preOrderTraverse1(root.right);
  6. }
  7. }

  2)非递归实现

  1. public void preOrderTraverse2(TreeNode root) {
  2. Stack<TreeNode> stack = new Stack<>();
  3. TreeNode node = root;
  4. while (node != null || !stack.empty()) {
  5. if (node != null) {
  6. System.out.print(node.val + "->");
  7. stack.push(node);
  8. node = node.left;
  9. } else {
  10. TreeNode tem = stack.pop();
  11. node = tem.right;
  12. }
  13. }
  14. }

二、中序遍历

  访问顺序:先左子树,再根节点,最后右子树;上图的访问结果为:ADEFGHMZ。

  1)递归实现

  1. public void inOrderTraverse(TreeNode root) {
  2. if (root != null) {
  3. inOrderTraverse(root.left);
  4. System.out.print(root.val + "->");
  5. inOrderTraverse(root.right);
  6. }
  7. }

  2)非递归实现

  1. public void inOrderTraverse(TreeNode root) {
  2. Stack<TreeNode> stack = new Stack<>();
  3. TreeNode node = root;
  4. while (node != null || !stack.isEmpty()) {
  5. if (node != null) {
  6. stack.push(node);
  7. node = node.left;
  8. } else {
  9. TreeNode tem = stack.pop();
  10. System.out.print(tem.val + "->");
  11. node = tem.right;
  12. }
  13. }
  14. }

三、后序遍历

  访问顺序:先左子树,再右子树,最后根节点,上图的访问结果为:AEFDHZMG。

  1)递归实现

  1. public void postOrderTraverse(TreeNode root) {
  2. if (root != null) {
  3. postOrderTraverse(root.left);
  4. postOrderTraverse(root.right);
  5. System.out.print(root.val + "->");
  6. }
  7. }

  2)非递归实现

  1. public void postOrderTraverse(TreeNode root) {
  2. TreeNode cur, pre = null;
  3.  
  4. Stack<TreeNode> stack = new Stack<>();
  5. stack.push(root);
  6.  
  7. while (!stack.empty()) {
  8. cur = stack.peek();
  9. if ((cur.left == null && cur.right == null) || (pre != null && (pre == cur.left || pre == cur.right))) {
  10. System.out.print(cur.val + "->");
  11. stack.pop();
  12. pre = cur;
  13. } else {
  14. if (cur.right != null)
  15. stack.push(cur.right);
  16. if (cur.left != null)
  17. stack.push(cur.left);
  18. }
  19. }
  20. }

四、层次遍历

  访问结果:GDMAFHZE。

  1. public void levelOrderTraverse(TreeNode root) {
  2. if (root == null) {
  3. return;
  4. }
  5. Queue<TreeNode> queue = new LinkedList<TreeNode>();
  6. queue.add(root);
  7.  
  8. while (!queue.isEmpty()) {
  9. TreeNode node = queue.poll();
  10. System.out.print(node.val + "->");
  11.  
  12. if (node.left != null) {
  13. queue.add(node.left);
  14. }
  15. if (node.right != null) {
  16. queue.add(node.right);
  17. }
  18. }
  19. }

二叉树遍历(前序、中序、后序)-Java实现的更多相关文章

  1. 分别求二叉树前、中、后序的第k个节点

    一.求二叉树的前序遍历中的第k个节点 //求先序遍历中的第k个节点的值 ; elemType preNode(BTNode *root,int k){ if(root==NULL) return ' ...

  2. 算法进阶面试题03——构造数组的MaxTree、最大子矩阵的大小、2017京东环形烽火台问题、介绍Morris遍历并实现前序/中序/后序

    接着第二课的内容和带点第三课的内容. (回顾)准备一个栈,从大到小排列,具体参考上一课.... 构造数组的MaxTree [题目] 定义二叉树如下: public class Node{ public ...

  3. 二叉树 遍历 先序 中序 后序 深度 广度 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  4. 【数据结构】二叉树的遍历(前、中、后序及层次遍历)及leetcode107题python实现

    文章目录 二叉树及遍历 二叉树概念 二叉树的遍历及python实现 二叉树的遍历 python实现 leetcode107题python实现 题目描述 python实现 二叉树及遍历 二叉树概念 二叉 ...

  5. SDUT OJ 数据结构实验之二叉树八:(中序后序)求二叉树的深度

    数据结构实验之二叉树八:(中序后序)求二叉树的深度 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Probl ...

  6. SDUT-2804_数据结构实验之二叉树八:(中序后序)求二叉树的深度

    数据结构实验之二叉树八:(中序后序)求二叉树的深度 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 已知一颗二叉树的中序 ...

  7. javascript数据结构与算法--二叉树遍历(中序)

    javascript数据结构与算法--二叉树遍历(中序) 中序遍历按照节点上的键值,以升序访问BST上的所有节点 代码如下: /* *二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 * ...

  8. 前序+中序->后序 中序+后序->前序

    前序+中序->后序 #include <bits/stdc++.h> using namespace std; struct node { char elem; node* l; n ...

  9. LeetCode 145. 二叉树的后序遍历 (用栈实现后序遍历二叉树的非递归算法)

    题目链接:https://leetcode-cn.com/problems/binary-tree-postorder-traversal/ 给定一个二叉树,返回它的 后序 遍历. 示例: 输入: [ ...

  10. 给出 中序&后序 序列 建树;给出 先序&中序 序列 建树

    已知 中序&后序  建立二叉树: SDUT 1489 Description  已知一棵二叉树的中序遍历和后序遍历,求二叉树的先序遍历 Input  输入数据有多组,第一行是一个整数t (t& ...

随机推荐

  1. ASP.NET Core In Process Hosting on IIS with ASP.NET Core 2.2(转载)

    ASP.NET Core 2.2 has been out for a while now and with it come some significant improvements to the ...

  2. 学习Linq之前必须知道的几种语法糖

         » 引用百度解释: 语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语 ...

  3. webview学习

    Android中WebView使用6,js调java实现播放视频 https://blog.csdn.net/zhaihaohao1/article/details/77993890 android ...

  4. 在知识爆炸的年代如何学习,避免成为PPT架构师

    计算机的发展大体遵循摩尔定律,IT要学的东西越来越多,感觉无从下手 然后发现许多人,专门喜欢说这些名词概念装高大上,脱离一线开发,技术跟风盲目崇拜新的骚东西,比如docker,k8s,微服务,open ...

  5. Linux小知识点

    磁盘 Linux的磁盘类型有IDE和SCSI两种. IDE的命名方式是采用/dev/hdx(x代表磁盘块),其下的分区则是/dev/hdxy(y代表该磁盘上的分区号) SCSI则是采用/dev/sdx ...

  6. 『Python进阶』多进程多线程快速上手

    线程池快速上手 from concurrent.futures import ThreadPoolExecutor from utils import * workers = 8 with Threa ...

  7. javascript之DOM选择符

    javascript库中最常用的一项功能,就是根据CSS选择符选择与某个模式匹配的DOM元素.实际上jQuery的核心就是通过css选择符查询DOM文档取得元素的引用,从而抛开了getElementB ...

  8. HDP 3.1.0 集成 Sqoop2 踩坑问题记录

    HDP 3.1.0 集成 Sqoop2 踩坑问题记录 本文原始地址:https://sitoi.cn/posts/65261.html 问题一 $ sqoop:000> start job -n ...

  9. python 的 encode 、decode、字节串、字符串

    一.摆个图 DJ  DJ  DJ   Decode. J 解码 首先得知道字符串有哪些编码格式,至于为什么会有这么多的编码格式,以后再了解更新. 1.ASCII 占1个字节,只支持英文 2.GB231 ...

  10. Linux 批量查找并替换文件夹下所有文件的内容

    1.批量查找某个目下文件的包含的内容 cd etc grep -rn "查找的内容" ./ 2.批量替换某个目下所有包含的文件的内容 cd etc sed -i "s/查 ...