先序中序后序,递归与非递归,默认构造的排序二叉树

package Tree;import java.util.Stack;public class BinaryTree
{class Node{int value;Node LeftChild;Node RightChild;Node(int value) {this.value = value;LeftChild = null;RightChild = null;}}public Node root;//根节点Stack<Node>s = new Stack<>();BinaryTree() //这是构造方法,不能修改和定义成 public{root = null;}public void Binary(int array[])//what the fuck?{for(int i: array){insert(i);}}public void insert(int value){root = insert(root,value);}public Node insert(Node node,int value){if(node == null)node = new Node(value);else{if(value<=node.value)node.LeftChild = insert(node.LeftChild,value);elsenode.RightChild=insert(node.RightChild,value);}return node;}public void vist(Node node){if(node==null)return ;System.out.println(node.value);}public void PreOrderTravel(Node node)//先序遍历{if(node == null)//二叉树遍历先中后序指的是  根位置在遍历过程中的 位置return ;//其中二叉树遍历 都是先左后右vist(node);//先根PreOrderTravel(node.LeftChild);//然后左子树PreOrderTravel(node.RightChild);//最后右子树}public void PreOrderTravel()//先序遍历{PreOrderTravel(root);}public void PrintfNextOrderTravel(){NextOrderTravel(root);}public void NextOrderTravel(Node node)//后序遍历{                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           if(node==null)return ;//缩进//s.push(node);NextOrderTravel(node.LeftChild);//先左NextOrderTravel(node.RightChild);//然后右vist(node);//最后中}public void PrintfMidOrderTravel(){MidOrderTravel(root);}public void MidOrderTravel(Node node)//中序遍历{if(node==null)return ;//缩进MidOrderTravel(node.LeftChild);//先左vist(node);//然后中MidOrderTravel(node.RightChild);//最后右}public void PrintfFirstOrderTravel(){FirstOrderTravel(root);}public void FirstOrderTravel(Node node)//先序遍历的 非递归{Node p = node;while(p!=null||!s.isEmpty()){if(p!=null){s.push(p);System.out.println(p.value);//先输出 节点的值p = p.LeftChild;//遍历左子树}else{Node q=s.peek();//取栈顶元素s.pop();//System.out.println(q.value);p = q.RightChild;//遍历右子树}}}public void PrintfCentreOrderTravel()//中序遍历{CentreOrderTravel(root);}public void CentreOrderTravel(Node node){Node p = node;while(p!=null||!s.isEmpty()){if(p!=null){s.push(p);//  System.out.println(p.value);p = p.LeftChild;//遍历左子树}else{Node q=s.peek();s.pop();System.out.println(q.value);p = q.RightChild;//遍历右子树}}}public void PrintfLastOrderTravel()//后序遍历{LastOrderTravel(root);}public void LastOrderTravel(Node node){Node p = node;//为根节点Stack<Node> stack = new Stack<>();while(p!=null||!s.isEmpty()){//自己想的算法,空间复杂度 会大一点,待验证正确性,目前来说测试数据 正确if(p!=null){//牺牲s栈用来当辅助栈,只是用s来储存入栈的节点s.push(p);//如果  我们先把当前节点入栈,再把当前节点的右子树入栈,再把当前节点的左子树入栈stack.push(p);//那么 出栈顺序即代表了 我们想要的 后序遍历,即左->右->根//p = p.LeftChild;//遍历左子树p = p.RightChild;//遍历右子树//}else{Node q=s.peek();//取栈顶s.pop();p = q.LeftChild;//遍历左子树//System.out.println(q.value);}}while(!stack.isEmpty()){System.out.println(stack.peek().value);stack.pop();}}
}

=========================================================================================

测试类:

package Tree;
import java.util.Scanner;public class BinaryTreeSearch {public static void main(String args[]){@SuppressWarnings("resource")Scanner cin = new Scanner(System.in);while(true){BinaryTree Tree = new BinaryTree();int n =cin.nextInt();int array[] = new int [n];//    Random random = new Random();for(int i=0;i<n;i++)array[i] = cin.nextInt();//array[i]=i+1;for(int i=0;i<n;i++)System.out.print(array[i]+"*");System.out.println();Tree.Binary(array);System.out.println("先序遍历");Tree.PreOrderTravel();System.out.println("***********");System.out.println("中序遍历");Tree.PrintfMidOrderTravel();System.out.println("***********");System.out.println("后序遍历");Tree.PrintfNextOrderTravel();System.out.println("***********");System.out.println("中序遍历,非递归");Tree.PrintfCentreOrderTravel();System.out.println("***********");System.out.println("先序遍历,非递归");Tree.PrintfFirstOrderTravel();System.out.println("***********");System.out.println("后序遍历,非递归");Tree.PrintfLastOrderTravel();}//cin.close();}}

java 二叉树的各种遍历相关推荐

  1. Java 二叉树后序遍历(递归/非递归)

    Java 二叉树后序遍历(递归/非递归) 简介: 遍历是对树的一种最基本的运算,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次. 设L.D.R分 ...

  2. Java 二叉树中序遍历(递归/非递归)

    Java 二叉树中序遍历(递归/非递归) 中序遍历 代码实现 递归方式 非递归方式 简介: 遍历是对树的一种最基本的运算,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访 ...

  3. java二叉树的深度优先遍历_二叉树的广度优先遍历、深度优先遍历的递归和非递归实现方式...

    1 packageSolution;2 3 importjava.util.LinkedList;4 importjava.util.Queue;5 importjava.util.Stack;6 7 ...

  4. Java二叉树后序遍历:递归与迭代

    二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树:左子树和右子树又同样都是二叉树. 如下便是一棵二叉树: 二叉树的后序遍历方式为: 1. 如果根节点有左 ...

  5. Java二叉树逆序遍历_二叉树遍历小结

    二叉树遍历小结 声明 0 二叉树遍历概述 二叉树遍历:按照既定序,对每个节点仅访问一次: 二叉树非递归遍历思想:参考这篇博文,核心思想是存在重合元素的局部有序保证整体有序,由于二叉树的结构特点,二叉树 ...

  6. java二叉树的创建,遍历及其他方法

    2019独角兽企业重金招聘Python工程师标准>>> package tree;import java.util.Stack;/**二叉树**/ public class Bina ...

  7. java实现递归层次遍历_Java实现二叉树的前序、中序、后序、层序遍历(递归方法)...

    在数据结构中,二叉树是树中我们见得最多的,二叉查找树可以加速我们查找的效率,那么输出一个二叉树也变得尤为重要了. 二叉树的遍历方法分为四种,分别为前序遍历.中序遍历.后序.层序遍历.下图即为一个二叉树 ...

  8. [Leedcode][JAVA][第102题][二叉树的层序遍历][递归][迭代][BFS]

    [问题描述][第102题][二叉树的层序遍历][中等] 给你一个二叉树,请你返回其按 层序遍历 得到的节点值. (即逐层地,从左到右访问所有节点).示例: 二叉树:[3,9,20,null,null, ...

  9. java根据前序和中序建树_Java实现根据前序遍历构建二叉树(前序遍历、中序遍历、后序遍历)...

    Java实现根据前序遍历构建二叉树(前序遍历.中序遍历.后序遍历),Java关于ACM的代码真的好少,想参考如何用java实现二叉树googl 前言 Java关于ACM的代码真的好少,想参考如何用ja ...

最新文章

  1. poj2723详解(二分 + 2-SAT)( 两种方法求解 )
  2. f5 ddos cc——Mitigating DDoS Attacks with F5 Technology
  3. SonarQube代码质量管理工具安装与使用(sonarqube5.1.2 + sonar-runner-dist-2.4 + MySQL5.x)
  4. win7下搭建nginx+php的开发环境
  5. Java MySql 连接数据库
  6. 使用Network Recycle Bin启用映射网络驱动器上的回收站
  7. 细说IIS异常日志 — 你必须知道的功能
  8. itunes备份包括哪些内容_企业形象策划包括哪些内容?
  9. Spring Security 之多AuthenticationProvider认证模式实现
  10. 【鱼眼镜头8】张正友畸变公式;鱼眼的畸变公式需要使用入射角
  11. php choosewxpay fail,人人商城常见问题解决方案
  12. 华为NP课程笔记25-SDN简介
  13. 中国草鱼养殖产业发展现状分析,生态养殖是未来发展趋势「图」
  14. 刘德华直播观看人数破亿
  15. X Server移植指导之三 输出层移植 (XServer Porting Guide)
  16. 孕妇饮食禁忌隐私政策
  17. matplotlib.pyplot.scatter( )绘制散点图与双月形图
  18. Kotlin学习(1)初识及环境搭建,大厂面试必备技能
  19. 【游戏逆向】FPS游戏自瞄透视模块动态加载分析
  20. 偏光显微镜基本原理及主要用途

热门文章

  1. BZOJ 2436 Noi嘉年华(优化DP)
  2. NEON在Android中的使用举例【转】
  3. 一个核物理学霸为何两次收到BlackHat的邀请
  4. TensorFlow教程之API DOC 6.1.4 Class tensorflow::Session
  5. webservice发布问题,部署iis后调用不成功
  6. SQLite多线程写锁文件解决方案
  7. 前端开发工具介绍----合成雪碧图工具(css sprite)
  8. AngularJS学习之旅—AngularJS 模块(十五)
  9. Xshell批量导入IP地址
  10. Mysql中添加汉字乱码无法识别问题