二叉树的前序、中序和后序遍历介绍及案例
文章目录
- 一、介绍
- 二、建立二叉树
- 1.节点类
- 2.二叉树
- 三、前序遍历
- 四、中序遍历
- 五、后序遍历
- 六、完整代码
一、介绍
前序遍历、中序遍历和后序遍历是二叉树的三种遍历方式,三者很像,具体的遍历步骤如下:
前序遍历:先输出父节点,然后依次遍历左子树,右子树。
中序遍历:先遍历左子树,后输出父节点,之后遍历右子树。
后序遍历:先遍历左子树,后遍历右子树,之后输出父节点。
二、建立二叉树
1.节点类
class Node{int num;//数据Node left;//左节点Node right;//右节点public Node(int num) {this.num = num;}@Overridepublic String toString() {return "Node{" +"num=" + num +'}';}
}
2.二叉树
因为这里的二叉树是普通的,没有其他特性,不好建立二叉树类,就在main方法里面直接挂上就行了。这里我们以下图的二叉树为例。
main方法里面的代码:
public static void main(String[] args) {Node root = new Node(1);Node n2 = new Node(2);Node n3 = new Node(3);Node n4 = new Node(4);Node n5 = new Node(5);Node n6 = new Node(6);Node n7 = new Node(7);Node n8 = new Node(8);Node n9 = new Node(9);root.left = n2;root.right = n3;n2.left = n4;n2.right = n5;n3.left = n6;n3.right = n7;n4.left = n8;n6.right = n9;}
三、前序遍历
使用递归的方法进行前序遍历,直接上代码。
public static void preOrder(Node root){if(root == null){return;}System.out.print(root+" ");preOrder(root.left);preOrder(root.right);}
结果:
Node{num=1} Node{num=2} Node{num=4} Node{num=8} Node{num=5} Node{num=3} Node{num=6} Node{num=9} Node{num=7}
四、中序遍历
public static void infixOrder(Node root){if(root == null){return;}infixOrder(root.left);System.out.print(root+" ");infixOrder(root.right);}
结果:
Node{num=8} Node{num=4} Node{num=2} Node{num=5} Node{num=1} Node{num=6} Node{num=9} Node{num=3} Node{num=7}
五、后序遍历
public static void postOrder(Node root){if(root == null){return;}postOrder(root.left);postOrder(root.right);System.out.print(root+" ");}
结果:
Node{num=8} Node{num=4} Node{num=5} Node{num=2} Node{num=9} Node{num=6} Node{num=7} Node{num=3} Node{num=1}
六、完整代码
public class BinaryTreeDemo {public static void main(String[] args) {Node root = new Node(1);Node n2 = new Node(2);Node n3 = new Node(3);Node n4 = new Node(4);Node n5 = new Node(5);Node n6 = new Node(6);Node n7 = new Node(7);Node n8 = new Node(8);Node n9 = new Node(9);root.left = n2;root.right = n3;n2.left = n4;n2.right = n5;n3.left = n6;n3.right = n7;n4.left = n8;n6.right = n9;preOrder(root);System.out.println();infixOrder(root);System.out.println();postOrder(root);}public static void preOrder(Node root){if(root == null){return;}System.out.print(root+" ");preOrder(root.left);preOrder(root.right);}public static void infixOrder(Node root){if(root == null){return;}infixOrder(root.left);System.out.print(root+" ");infixOrder(root.right);}public static void postOrder(Node root){if(root == null){return;}postOrder(root.left);postOrder(root.right);System.out.print(root+" ");}
}//节点
class Node{int num;Node left;Node right;public Node(int num) {this.num = num;}@Overridepublic String toString() {return "Node{" +"num=" + num +'}';}
}
二叉树的前序、中序和后序遍历介绍及案例相关推荐
- 二叉树深度优先 java_二叉树遍历(前序、中序、后序、层次、深度优先、广度优先遍历) java实现...
二叉树是一种非常重要的数据结构,非常多其他数据结构都是基于二叉树的基础演变而来的.对于二叉树,有深度遍历和广度遍历,深度遍历有前序.中序以及后序三种遍历方法,广度遍历即我们寻常所说的层次遍历.由于树的 ...
- 手动创建一棵二叉树,然后利用前序、中序、后序、层序进行遍历(从创建二叉树到各种方式遍历)(含运行结果)
手动创建一棵二叉树,然后利用前序.中序.后序.层序进行遍历 import java.util.LinkedList; import java.util.List; import java.util.Q ...
- 【LeetCode系列】从中序与后序遍历序列构造二叉树 从前序与中序遍历序列构造二叉树...
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 105. 从前序与中序遍历序列构造二叉树 根据一棵树的前序遍历与中序遍历构造二叉树 ...
- 105从前序与中序遍历序列构造二叉树 106 从中序与后序遍历序列构造二叉树 (递归 + 哈希)
引言 这两道题主要是考察二叉树遍历的掌握,即由前序和中序推出原二叉树,由后序和中序推出原二叉树,这里先来说一下推导过程: 前序和中序 知道前序遍历和中序遍历,如何推原二叉树?(直接是结论,可以自行推导 ...
- 二叉树前序、中序、后序遍历求法
二叉树前序.中序.后序遍历相互求法 二叉树的三种遍历方法: 前序遍历: 1.访问根节点 2.前序遍历左子树 3.前序遍历右子树 中序遍历: 1.中序遍历左子树 2.访问根节点 3.中序遍历右子树 后序 ...
- PHP实现二叉树的深度优先遍历(前序、中序、后序)和广度优先遍历(层次) 转载陈小龙哈2017...
http://blog.csdn.net/baidu_30000217/article/details/52953127 前言: 深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个结点 ...
- 二叉树前序遍历python输出_Python 二叉树查找 前序 中序 后序遍历
# -*- coding: utf-8 -*- # author: zhonghua # filename: search_binarytree.py # create: 2016/3/29 # ve ...
- 二叉树的前序、中序、后序遍历与创建
#include <iostream> #include <string> #include <stack> using namespace std; struct ...
- leetcode 106. 从中序与后序遍历序列构造二叉树 105. 从前序与中序遍历序列构造二叉树思考分析
目录 1.106题目 2.参考思路:递归切割数组 3.105题目 4.同样思路的代码 1.106题目 2.参考思路:递归切割数组 代码参考:公众号:代码随想录 后序数组+中序数组 以 后序数组(左右中 ...
- java二叉树合并_Java(树的前中后序遍历构造二叉树题型整合)前序和中序、中序和后序、前序和后序遍历序列构造二叉树算法整合归纳...
前言 二叉树各种花里胡哨的算法题真的把我搞晕了,今天特地整理出一类有关二叉树的算法题,希望能帮助阅读到此文章的人,今后不再受此类题型的困扰. 一.题目类型 已知二叉树的两种遍历序列,请根据该序列构建二 ...
最新文章
- SQL Server查询某字段在哪些表中
- 【剑指offer】丑数
- eclipse做java_在Eclipse中使用Java 12
- CentOS 5.3 下快速安装配置 PPTP ××× 服务器
- Script:Collect vip resource Diagnostic Information
- [转贴]Cocos2d-x3.2与OpenGL渲染总结(一)Cocos2d-x3.2的渲染流程
- 为什么年轻人挣得很多还是穷?北上广深挑战指数报告~
- java swing removeall_java中JFrame中函数removeAll的用法 | 学步园
- 如何在VScode 中 调试 ts 文件 Unit test
- Log4net使用指南[转]
- VS2008添加ODBC数据源崩溃
- android用户头像保存,Android的登陆注册(sharedpreferences和SQLite保存以及头像上传显示...
- iOS应用崩溃日志分析
- div+css视频教程大全免费下载更有html5教程
- C1认证之计算机通识知识及习题总结——我的学习笔记
- matlab中clc什么意思,MATLAB中clc是什么意思
- lnmp一键部署脚本
- copy.copy()与copy.deepcopy()的详解
- Python知识体系图
- 7.26 2第5篇 无人驾驶带来巨大商机