【数据结构--二叉树】Java递归实现二叉树遍历
参考链接: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递归实现二叉树遍历的更多相关文章
- 【LeetCode-面试算法经典-Java实现】【145-Binary Tree Postorder Traversal(二叉树非递归后序遍历)】
[145-Binary Tree Postorder Traversal(二叉树非递归后序遍历)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a bin ...
- java递归之“二叉树”
物有本末,事有始终,知所先后,则近道矣.-----题记. BotWong半路入行it做码农,也就半年时间,竟“不知天高地厚”地来到了深圳闯天下.一口气投了百个简历,一周后终于有公司邀约面试,除了基础的 ...
- java 递归求二叉树深度
给定二叉树,找到它的最大深度. 最大深度是从根节点到最远叶节点的最长路径上的节点数. 注意:叶子是没有子节点的节点. Example: Given binary tree [3,9,20,null,n ...
- 二叉树JAVA实现
为了克服对树结构编程的畏惧感和神秘感,下定决心将二叉树的大部分操作实现一遍,并希望能够掌握二叉树编程的一些常用技术和技巧.关于编程实现中的心得和总结,敬请期待!~ [1] 数据结构和表示: 二叉树的 ...
- 数据结构二叉树的递归与非递归遍历之java,javascript,php实现可编译(1)java
前一段时间,学习数据结构的各种算法,概念不难理解,只是被C++的指针给弄的犯糊涂,于是用java,web,javascript,分别去实现数据结构的各种算法. 二叉树的遍历,本分享只是以二叉树中的先序 ...
- JAVA下实现二叉树的先序、中序、后序、层序遍历(递归和循环)
import java.util.HashMap; import java.util.LinkedList; import java.util.Map; import java.util.Queue; ...
- JAVA递归、非递归遍历二叉树(转)
原文链接: JAVA递归.非递归遍历二叉树 import java.util.Stack; import java.util.HashMap; public class BinTree { priva ...
- java创建二叉树并实现非递归中序遍历二叉树
java创建二叉树并递归遍历二叉树前面已有讲解:http://www.cnblogs.com/lixiaolun/p/4658659.html. 在此基础上添加了非递归中序遍历二叉树: 二叉树类的代码 ...
- 非递归遍历二叉树Java版的实现代码(没写层次遍历)
直接上代码呵呵,里面有注解 package www.com.leetcode.specificProblem; import java.util.ArrayList; import java.util ...
随机推荐
- 3-2 从降级的例子 认识Polly套路
1 没有返回值的降级 Policy policy = Policy.Handle<Exception>().Fallback(() => { Console.WriteLine(&q ...
- 奥格尔巧妙kfifo
奥格尔巧妙kfifo Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csdn.net/chen19870707 Date:O ...
- ADO.net Connection对象简介
Connection对象 学习的是刘皓的文章 ADO.NET入门教程(四) 品味Connection对象 这篇文章开始水平一般起来了,主要介绍了要优雅的使用这个对象 1 用try...catch.. ...
- arcserver开发小结(三)
一.关于网络数据集的制作 由于要做实现网络分析的功能,而手中却没有网络数据集,关于网络数据集的制作,网上也有不少的资料.我参考的是ESRI为我们提供的帮助文档(Network_Analyst_Tuto ...
- [ACM] POJ 3096 Surprising Strings (map使用)
Surprising Strings Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5783 Accepted: 379 ...
- CefSharp For WPF基本使用
原文:CefSharp For WPF基本使用 Nuget引用 CefSharp.Wpf CefSharp.Common cef.redist.x64 cef.redist.x86 直接搜索安装Cef ...
- uwp 沉浸式状态栏
//隐藏状态栏if (ApiInformation.IsTypePresent(typeof(StatusBar).ToString())) { StatusBar statusBar = Statu ...
- React学习(1)——constructor
constructor(props) { super(props); this.state = { orderNo: "001", wid: 6 }; } constructor: ...
- easyui Full Layout
@{ Layout = null;}<!DOCTYPE html><html><head> <meta name="viewport&q ...
- WPF 视图导航
<Window x:Class="ViewExam.MainWindow" xmlns="http://schemas.microsoft.com/w ...