项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步

二叉树是一种非常重要的数据结构,也是平时面试的时候面试官喜欢出的问题之一。关于二叉树的概念,就不做过多解释,估计各种课本网络上各种资料都充斥着关于二叉树的原理介绍。我们是实战派,原理不在啰嗦,重点看代码,看看怎样实现一棵二叉树,并分别用实现先序遍历,中序遍历以及后续遍历。

package leilei.bit.edu.tree;import java.util.Stack;public class BinTree<T> {private Node<T> root;public BinTree(Node<T> root) {this.root = root;}public Node<T> getRoot() {return root;}public void setRoot(Node<T> root) {this.root = root;}//内部节点类private static class Node<T>{public T data;public Node<T> left;public Node<T> right;public Node(T data,Node<T> left,Node<T> right) {this.data = data;this.left = left;this.right = right;}}/** 递归先序遍历*/public void preorder(Node<T> root) {if (root != null) {System.out.print(root.data + " ");preorder(root.left);preorder(root.right);}}/** 递归中序遍历*/public void midorder(Node<T> root) {if (root != null) {midorder(root.left);System.out.print(root.data + " ");midorder(root.right);}}/** 递归后序遍历*/public void postorder(Node<T> root) {if (root != null) {postorder(root.left);postorder(root.right);System.out.print(root.data + " ");}}/** 非递归先序*/public void preorder_no_recursive(Node<T> root) {if (root == null)return;Stack<Node<T>> stack = new Stack<Node<T>>();stack.push(root);while(!stack.isEmpty()) {while(stack.peek() != null) {System.out.print(stack.peek().data + " ");stack.push(stack.peek().left);}Node<T> p = stack.pop();if(!stack.isEmpty()) {p = stack.pop();stack.push(p.right);}}}public static void main(String[] args) {Node<String> G = new Node<String>("G",null,null);Node<String> F = new Node<String>("F",null,null);Node<String> E = new Node<String>("E",null,null);Node<String> D = new Node<String>("D",F,null);Node<String> B = new Node<String>("B",D,E);Node<String> C = new Node<String>("C",null,G);Node<String> root = new Node<String>("A",B,C);BinTree<String> tree = new BinTree<String>(root);System.out.println("The preorder is:");tree.preorder(tree.root);System.out.println("\nThe midorder is:");tree.midorder(tree.root);System.out.println("\nThe postorder is:");tree.postorder(tree.root);System.out.println("\nThe no_recursive is:");tree.preorder_no_recursive(tree.root);}
}

代码运行结果

The preorder is:
A B D F E C G
The midorder is:
F D B E A C G
The postorder is:
F D E B G C A
The no_recursive is:
A B D F E C G

另外发现一个写二叉树不错的链接,有空可以详细看看里面的代码:
https://github.com/yuzhangcmu/LeetCode/blob/master/tree/TreeDemo.java

二叉树 先序遍历 中序遍历 后续遍历 java实现相关推荐

  1. 用栈作为存储实现二叉树先序遍历 中序遍历 后续遍历

    package com.example.ljia.Structure.tree;import lombok.Data;import java.util.Stack;/*** @ Author :Sam ...

  2. 二叉树的先序、中序、后续遍历【Java】

    夫陶公清风千古,余又何人,敢称庶几 文章目录 介绍 一.编写节点类 二. 遍历二叉树 先序遍历 中序遍历 后序遍历 三.创建一棵树 介绍 在计算机科学中,二叉树(英语:Binary tree)是每个节 ...

  3. 【C++】二叉树的先序、中序、后序遍历序列

    二叉树常用到的遍历有这三种 先序遍历:先遍历根节点,然后再分别遍历左节点和右节点.(根左右) 中序遍历:先遍历左节点,然后再遍历根节点,最后遍历右节点.(左根右) 后序遍历:先遍历左节点,然后再遍历右 ...

  4. 给定二叉树先序、中序遍历序列,求后序遍历

    给定一个二叉树的前序遍历和中序遍历的序列,输出对应这个二叉树的后续遍历序列. 输入描述: 输入为一行. 两个字符串,分别表示二叉树的前序遍历和中序遍历结果,用空格分隔.保证数据合法 输出描述: 对应输 ...

  5. 左神算法:分别用递归和非递归方式实现二叉树先序、中序和后序遍历(Java版)

    本题来自左神<程序员代码面试指南>"分别用递归和非递归方式实现二叉树先序.中序和后序遍历"题目. 题目 用递归和非递归方式,分别按照二叉树先序.中序和后序打印所有的节点 ...

  6. java二叉树合并_Java(树的前中后序遍历构造二叉树题型整合)前序和中序、中序和后序、前序和后序遍历序列构造二叉树算法整合归纳...

    前言 二叉树各种花里胡哨的算法题真的把我搞晕了,今天特地整理出一类有关二叉树的算法题,希望能帮助阅读到此文章的人,今后不再受此类题型的困扰. 一.题目类型 已知二叉树的两种遍历序列,请根据该序列构建二 ...

  7. (王道408考研数据结构)第五章树-第三节1:二叉树遍历(先序、中序和后序)

    文章目录 一:二叉树遍历概述 二:二叉树深度优先遍历 (1)先序遍历-根左右(NLR) (2)中序遍历-左根右(LNR) (3)后序遍历-左右根(LRN) 总结:三种遍历方式动图演示 三:二叉树的层序 ...

  8. 二叉树前序遍历python输出_[宜配屋]听图阁 - Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例...

    本文实例讲述了Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作.分享给大家供大家参考,具体如下: 实现一个功能: 输入:一颗二叉树的先序和中序遍历 输出:后续遍历 思想: 先序遍历中,第 ...

  9. 二叉树的先序,中序,后序,层次的递归及非递归遍历

    昨天写数据结构关于二叉树的几种顺序的递归及非递归遍历的程序,后续遍历有点难.现在把程序给大家参考一下,有些思路参考自:http://www.cnblogs.com/dolphin0520/archiv ...

  10. 【数据结构笔记10】二叉树的先序、中序、后序遍历,中序遍历的堆栈/非递归遍历算法,层序遍历,确定一个二叉树,树的同构

    本次笔记内容: 3.3.1 先序中序后序遍历 3.3.2 中序非递归遍历 3.3.3 层序遍历 3.3.4 遍历应用例子 小白专场:题意理解及二叉树表示 小白专场:程序框架.建树及同构判别 文章目录 ...

最新文章

  1. 禁用GPU版本TensorFlow,切换到CPU版本TensorFlow。
  2. (转)Apache Commons工具集简介
  3. iOS实战:第一次在iTunesConnect上建立应用时注意公司名称
  4. Django--实现分页功能,并且基于cookie实现用户定制每页的数据条数
  5. Oracle CPU使用率过高问题处理
  6. php worker,问题 php不支持worker工作模式的报错
  7. 文件服务器缓存加速,存储缓存为文件传输提速
  8. python3 urllib安装_对python3 urllib包与http包的使用详解
  9. JimuReport积木报表与JeecgBoot集成文档—开源免费的报表工具!
  10. vb mysql边记录边统计_VB与Access连接,检索、核对、处理数据
  11. DirectFB 之 FillRectangle 绘制矩形
  12. applicationcontext获取bean_如果你每次面试前都要去背一篇Spring中Bean的生命周期,请看完这篇文章...
  13. WiFi-802.11 2.4G频段 5G频段 信道频率分配表
  14. 《深入理解Java虚拟机》笔记04之垃圾收集算法
  15. 注塑成型缺陷熔接痕产生原因及解决方案
  16. RE: C与C++社区混战,C#会重蹈覆辙吗?
  17. word文档转pdf并在任意浏览器预览打印一体化方案
  18. 微信小程序-名片复制功能效果
  19. 1.9UPC寒假个人训练第一场
  20. 谈谈现在低价U盘的质量问题

热门文章

  1. c++ STL模板(一)
  2. Sass--占位符 %placeholder
  3. Linux安装Nginx1.7.4、php5.5.15和配置
  4. Linux中svn提交文件后自动同步更新到网站目录
  5. Jfinal weixin源码分析---碎碎念(看最后,有福利)
  6. 【php】基础学习4
  7. EXT.NET 使用总结(2) ---TreePanel(带右键菜单,节点自定义属性)
  8. 在RichEdit中插入GIF图片的方法
  9. DB2事务日志使用经验
  10. 在Visio里加上、下标方法