二叉树类:

 package com.antis.tree;

 public class BinaryTree {

      int data;      //根节点数据
BinaryTree left; //左子树
BinaryTree right; //右子树 public BinaryTree(int data) //实例化二叉树类
{
this.data = data;
left = null;
right = null;
}
/**
* 向二叉树中插入子节点
* @param root
* @param data
*/
public void insert(BinaryTree root,int data){
//二叉树的左节点都比根节点小
if(data>root.data)
{
if(root.right==null){
root.right = new BinaryTree(data);
}else{
this.insert(root.right, data);
}
}else{
//二叉树的右节点都比根节点大
if(root.left==null){
root.left = new BinaryTree(data);
}else{
this.insert(root.left, data);
}
}
} }

二叉树遍历代码:

 package com.antis.tree;

 import java.util.Stack;

 public class BinaryTreeTraversal {

      /**
* 先序遍历--先根遍历递归
* @param root
*/
public static void preOrder(BinaryTree root){ //先根遍历
if (root==null) {
return;
}
System.out.print(root.data+"-");
preOrder(root.left);
preOrder(root.right);
}
/**
* 中序遍历--中根遍历递归
* @param root
*/
public static void inOrder(BinaryTree root){ //中根遍历
if (root==null) {
return;
}
inOrder(root.left);
System.out.print(root.data+"--");
inOrder(root.right);
}
/**
* 后序遍历--后根遍历递归
* @param root
*/
public static void postOrder(BinaryTree root){ //后根遍历
if (root==null) {
return;
}
postOrder(root.left);
postOrder(root.right);
System.out.print(root.data+"---");
}
// 先序遍历非递归
public static void preOrder2(BinaryTree t) {
Stack<BinaryTree> s = new Stack<BinaryTree>();
while (t != null || !s.empty()) {
while (t != null) {
System.out.print(t.data+"-");
s.push(t);
t = t.left;
}
if (!s.empty()) {
t = s.pop();
t = t.right;
}
}
}
// 中序遍历非递归
public static void InOrder2(BinaryTree t) {
Stack<BinaryTree> s = new Stack<BinaryTree>();
while (t != null || !s.empty()) {
while (t != null) {
s.push(t);
t = t.left;
}
if (!s.empty()) {
t = s.pop();
System.out.print(t.data+"--");
t = t.right;
}
}
} // 后序遍历非递归
public static void PostOrder2(BinaryTree t) {
Stack<BinaryTree> s = new Stack<BinaryTree>();
Stack<Integer> s2=new Stack<Integer>();
Integer i=new Integer(1);
while (t != null || !s.empty()) {
while (t != null) {
s.push(t);
s2.push(new Integer(0));
t = t.left;
}
while (!s.empty() && s2.peek().equals(i)) {
s2.pop();
System.out.print(s.pop().data+"---");
} if (!s.empty()) {
s2.pop();
s2.push(new Integer(1));
t = s.peek();
t = t.right;
}
}
}
public static void main(String[] str){
int[] array = {12,76,35,22,16,48,90,46,9,40};
BinaryTree root = new BinaryTree(array[0]); //创建二叉树
for(int i=1;i<array.length;i++){
root.insert(root, array[i]); //向二叉树中插入数据
}
System.out.println("先根遍历:");
preOrder(root);
System.out.println();
System.out.println("先根遍历:");
preOrder2(root);
System.out.println();
System.out.println("中根遍历:");
inOrder(root);
System.out.println();
System.out.println("中根遍历:");
InOrder2(root);
System.out.println();
System.out.println("后根遍历:");
postOrder(root);
System.out.println();
System.out.println("后根遍历:");
PostOrder2(root);
}
}

运行结果:

先根遍历:
12-9-76-35-22-16-48-46-40-90-
先根遍历:
12-9-76-35-22-16-48-46-40-90-
中根遍历:
9--12--16--22--35--40--46--48--76--90--
中根遍历:
9--12--16--22--35--40--46--48--76--90--
后根遍历:
9---16---22---40---46---48---35---90---76---12---
后根遍历:
9---16---22---40---46---48---35---90---76---12---

JAVA二叉树递归构造、二叉树普通遍历及递归遍历的更多相关文章

  1. 非递归遍历二叉树Java版的实现代码(没写层次遍历)

    直接上代码呵呵,里面有注解 package www.com.leetcode.specificProblem; import java.util.ArrayList; import java.util ...

  2. java实现二叉树的前中后遍历(递归和非递归)

    这里使用下图的二叉树作为例子: 首先建立树这个类: public class Node { private int data; private Node leftNode; private Node ...

  3. 【Java】 二叉树的遍历(递归与循环+层序遍历)

    在[Java] 大话数据结构(9) 树(二叉树.线索二叉树)一文中,已经实现了采用递归方法的前.中.后序遍历,本文补充了采用循环的实现方法.以及层序遍历并进行了一个总结. 递归实现 /* * 前序遍历 ...

  4. Java实现二叉树的先序、中序、后序、层序遍历(递归和非递归)

    二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的.对于二叉树,有前序.中序以及后序三种遍历方法.因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易 ...

  5. [LeetCode]105. 从前序与中序遍历序列构造二叉树(递归)、108. 将有序数组转换为二叉搜索树(递归、二分)

    题目 05. 从前序与中序遍历序列构造二叉树 根据一棵树的前序遍历与中序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 题解 使用HashMap记录当前子树根节点在中序遍历中的位置,方便每次 ...

  6. Java实现 LeetCode 106 从中序与后序遍历序列构造二叉树

    106. 从中序与后序遍历序列构造二叉树 根据一棵树的中序遍历与后序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 例如,给出 中序遍历 inorder = [9,3,15,20,7] 后序 ...

  7. Java实现 LeetCode 105 从前序与中序遍历序列构造二叉树

    105. 从前序与中序遍历序列构造二叉树 根据一棵树的前序遍历与中序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中 ...

  8. 【算法】二叉树、N叉树先序、中序、后序、BFS、DFS遍历的递归和迭代实现记录(Java版)

    本文总结了刷LeetCode过程中,有关树的遍历的相关代码实现,包括了二叉树.N叉树先序.中序.后序.BFS.DFS遍历的递归和迭代实现.这也是解决树的遍历问题的固定套路. 一.二叉树的先序.中序.后 ...

  9. Java构造二叉树、树形结构先序遍历、中序遍历、后序遍历

    package com.example.demo; public class BTree { public int data; public BTree left; public BTree rigt ...

随机推荐

  1. [转]Web API Introduction to OData Services using ASP.NET Web API

    本文转自:http://mahedee.net/tag/web-api/ What is OData? OData Stands for Open Data Protocol. It is a dat ...

  2. 微信小程序准备阶段。(一)

    --知识储备--HTML+JS+CSS (一)下载一个微信web开发工具(后续代码都会写在这里边)附上链接:https://mp.weixin.qq.com/debug/wxadoc/dev/devt ...

  3. C#语言-07.文件操作

    a. 文件操作:适用于相对简单的数据保存 i. 读写文件的步骤: . 创建文件流 . 创建读写器 . 读写文件 . 关闭读写器 . 关闭文件流 ii. FileStream(文件流),它主要用于读写文 ...

  4. C# XML相关

    XmlDocument doc = new XmlDocument(); 1.string类型的xml,如何转换成xml类型 doc.LoadXml("需要传入的string类型的xml&q ...

  5. Mysql 删除数据表重复行

    准备示例数据 以下sql创建表,并将示例数据插入到用于演示的contacts表中. CREATE TABLE contacts ( id INT PRIMARY KEY AUTO_INCREMENT, ...

  6. 由ArrayList来深入理解Java中的fail-fast机制

    1. fail-fast简介“快速失败”也就是fail-fast,它是Java集合的一种错误检测机制.某个线程在对collection进行迭代时,不允许其他线程对该collection进行结构上的修改 ...

  7. Html5本地存储+本地数据库+离线存储

    首先介绍什么叫存储: cache:通常把它叫做缓存,功能就是把从DB,或者磁盘拿出来的东西放在缓存里面,这样的话可以减少读取磁盘的IO. 磁盘文件:通常把一些图片或者一些视频都存放在磁盘上. 数据库: ...

  8. flask-login2的简单使用

    #coding:utf8 from flask import Flask, render_template, request, redirect, url_for, flash, abort from ...

  9. javascript获取文件后缀名

    javascript获取文件后缀名:在需要验证文件格式的时候,首先就要获得文件的格式,下面是一个通过正则表达式获取文件后缀名的一个简单实例. function validate(){ var impo ...

  10. UOJ#288:基础数据结构练习题

    题面 UOJ Sol 玄学,不会势能分析 所以 维护区间最大最小值 把开根变成区间减法 如果最大值开根后的变化量和最小值的相等,就直接打个减法\(lazy\) # include <bits/s ...