参考链接:https://www.cnblogs.com/yaobolove/p/6213936.html

这有一棵树:

1、节点对象

package com.tree.mybinarytree;
/**
* 二叉树TreeNode,每个node代表树中的一个节点
* @author ZX
* @date 2018年7月
*/
public class Node {
//左边子节点
private Node leftNode;
//右边子节点
private Node rightNode;
//节点数据
private String data; //getset
public Node getLeftNode() {
return leftNode;
}
public void setLeftNode(Node leftNode) {
this.leftNode = leftNode;
}
public Node getRightNode() {
return rightNode;
}
public void setRightNode(Node rightNode) {
this.rightNode = rightNode;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
//constructor
public Node() {}
public Node(Node leftNode,Node rightNode,String data) {
this.leftNode=leftNode;
this.rightNode=rightNode;
this.data=data;
} }

2、测试类

package com.tree.mybinarytree;

/**
* 1、组装树 2、遍历树 3、测试
*
* @author zx
*
*/
public class TreeTest {
public static void main(String[] args) {
//按照图片组装树
Node G = new Node(null, null, "G"); Node F = new Node(null, null, "F"); Node E = new Node(null, null, "E"); Node D = new Node(null, null, "D"); Node C = new Node(F, G, "C"); Node B = new Node(D, E, "B"); Node A = new Node(B, C, "A");
//遍历
System.out.println("先序遍历");
theFirstTraversal(A);
System.out.println("");
System.out.println("中序遍历");
theInOrderTraversal(A);
System.out.println("");
System.out.println("后序遍历");
thePostOrderTraversal(A);
System.out.println(""); } public static void printNode(Node node) {
System.out.print(node.getData());
} /**
* 先序遍历
* @param root
*/
public static void theFirstTraversal(Node root) { // 先序遍历
printNode(root);
if (root.getLeftNode() != null) { // 使用递归进行遍历左孩子
theFirstTraversal(root.getLeftNode());
}
if (root.getRightNode() != null) { // 递归遍历右孩子
theFirstTraversal(root.getRightNode());
}
}
/**
* 中序遍历
* @param root
*/
public static void theInOrderTraversal(Node root) { // 中序遍历
if (root.getLeftNode() != null) {
theInOrderTraversal(root.getLeftNode());
}
printNode(root);
if (root.getRightNode() != null) {
theInOrderTraversal(root.getRightNode());
}
}
/**
* 后序遍历
* @param root
*/
public static void thePostOrderTraversal(Node root) { // 后序遍历
if (root.getLeftNode() != null) {
thePostOrderTraversal(root.getLeftNode());
}
if (root.getRightNode() != null) {
thePostOrderTraversal(root.getRightNode());
}
printNode(root);
} }

由于二叉查找树可以任意构造,同样的值,可以构造出很少分支的二叉查找树,显然这棵二叉树的查询效率和顺序查找差不多。若想二叉查找数的查询性能最高,需要这棵二叉查找树是平衡的,也即平衡二叉树(AVL树)

【数据结构--二叉树】Java递归实现二叉树遍历的更多相关文章

  1. 【LeetCode-面试算法经典-Java实现】【145-Binary Tree Postorder Traversal(二叉树非递归后序遍历)】

    [145-Binary Tree Postorder Traversal(二叉树非递归后序遍历)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a bin ...

  2. java递归之“二叉树”

    物有本末,事有始终,知所先后,则近道矣.-----题记. BotWong半路入行it做码农,也就半年时间,竟“不知天高地厚”地来到了深圳闯天下.一口气投了百个简历,一周后终于有公司邀约面试,除了基础的 ...

  3. java 递归求二叉树深度

    给定二叉树,找到它的最大深度. 最大深度是从根节点到最远叶节点的最长路径上的节点数. 注意:叶子是没有子节点的节点. Example: Given binary tree [3,9,20,null,n ...

  4. 二叉树JAVA实现

    为了克服对树结构编程的畏惧感和神秘感,下定决心将二叉树的大部分操作实现一遍,并希望能够掌握二叉树编程的一些常用技术和技巧.关于编程实现中的心得和总结,敬请期待!~ [1]  数据结构和表示: 二叉树的 ...

  5. 数据结构二叉树的递归与非递归遍历之java,javascript,php实现可编译(1)java

    前一段时间,学习数据结构的各种算法,概念不难理解,只是被C++的指针给弄的犯糊涂,于是用java,web,javascript,分别去实现数据结构的各种算法. 二叉树的遍历,本分享只是以二叉树中的先序 ...

  6. JAVA下实现二叉树的先序、中序、后序、层序遍历(递归和循环)

    import java.util.HashMap; import java.util.LinkedList; import java.util.Map; import java.util.Queue; ...

  7. JAVA递归、非递归遍历二叉树(转)

    原文链接: JAVA递归.非递归遍历二叉树 import java.util.Stack; import java.util.HashMap; public class BinTree { priva ...

  8. java创建二叉树并实现非递归中序遍历二叉树

    java创建二叉树并递归遍历二叉树前面已有讲解:http://www.cnblogs.com/lixiaolun/p/4658659.html. 在此基础上添加了非递归中序遍历二叉树: 二叉树类的代码 ...

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

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

随机推荐

  1. python 教程 第八章、 第一个python程序

    第八章. 第一个python程序 #!/usr/bin/env python import os import sys import time source = [r'G:\s1', r'G:\s2' ...

  2. HDU5187 zhx's contest(计数问题)

    主题链接: http://acm.hdu.edu.cn/showproblem.php?pid=5187 题意: 从1~n,有多少种排列 使得 a1~ai 满足单调递增或者单调递减. ai~an 满足 ...

  3. css 浏览器兼容性问题解决

    一个.!important (功能有限)   随着IE7正确!important支持, !important 方法现在只IE6兼容.(注意措辞.我记得这句话需要推进的位置.)   : #example ...

  4. 带参跳转其他controller

    public class GoToOtherController : Controller { public ActionResult Index() { var vm = new GetValueF ...

  5. WPF实现选项卡效果(3)——自定义动态添加的AvalonDock选项卡内容

    原文:WPF实现选项卡效果(3)--自定义动态添加的AvalonDock选项卡内容 简介 在前面一篇文章里面,我们实现了AvalonDock选项卡的动态添加,但是对于选项卡里面的内容,我们并没有实现任 ...

  6. sql 1=1

    大多数时候是为了sql拼写方便而加的条件从执行任务来看,不影响性能  

  7. c#中的GetUpperBound,GetLowerBound方法

    今天使用数组的时候,用到了几个数组的属性,总结如下: Array的Rank 属性:语法:public int Rank { get; } 得到Array的秩(维数).Array的GetUpperBou ...

  8. Spring 中 CharacterEncodingFilter 失效?

    # 问题 Spring 提供了CharcterEncodingFilter,专门解决字符串编码的问题. 诡异的是,在类 AbstractAnnotationConfigDispatcherServle ...

  9. 定长文本格式编辑神器 - Record Editor

    由于项目里有系统使用的是定长的文本格式,如果列数比较多的话编辑检查起来会特别麻烦.之前也找了各种编辑器的插件,最多只能显示列宽.辅助线而以还是不方便 .最后发现了一个开源项目 Record Edito ...

  10. Assertion failure in UITableViewCell layoutSublayersOfLayer解决办法

    iOS6 设备在更新UITableViewCell的时候遇到了 Assertion failure in -[UITableViewCell layoutSublayersOfLayer:], /So ...