前中后序遍历递归实现+层序遍历:

树的结点类代码:

public class TreeNode<Value extends Comparable<? super Value>> {
private Value value;
private TreeNode left;
private TreeNode right; public Value getValue() {
return value;
} public void setValue(Value value) {
this.value = value;
} public TreeNode getLeft() {
return left;
} public void setLeft(TreeNode left) {
this.left = left;
} public TreeNode getRight() {
return right;
} public void setRight(TreeNode right) {
this.right = right;
} public TreeNode(Value value){
this.value = value;
}
}  

接下来对这颗树进行遍历:

遍历类代码:

public class Treetraversal {
/**
* 前序遍历,先根遍历
*
* @param node 树的根
*/
public static void preOrder(TreeNode node) {
if (node == null) return;
System.out.print(node.getValue() + "\t");
preOrder(node.getLeft());
preOrder(node.getRight());
} /**
* 中序遍历,中根遍历
*
* @param node 树的根
*/
public static void inOrder(TreeNode node) {
if (node == null) return;
inOrder(node.getLeft());
System.out.print(node.getValue() + "\t");
inOrder(node.getRight());
} /**
* 后序遍历,后根遍历
*
* @param node 树的根
*/
public static void postOrder(TreeNode node) {
if (node == null) return;
postOrder(node.getLeft());
postOrder(node.getRight());
System.out.print(node.getValue() + "\t");
} /**
* 层序遍历,层次遍历
*
* @param node 树的根
*/
public static void levelOrder(TreeNode node) {
java.util.LinkedList<TreeNode> queue = new java.util.LinkedList<>();
queue.add(node);
while (!queue.isEmpty()) {
TreeNode cur = queue.pop();
System.out.print(cur.getValue() + "\t");
if (cur.getLeft() != null) queue.add(cur.getLeft());
if (cur.getRight() != null) queue.add(cur.getRight());
}
} public static void main(String[] args) {
//创建一颗树,一个样例
TreeNode<Character> root = new TreeNode<>('A');
root.setLeft(new TreeNode<>('B'));
root.getLeft().setLeft(new TreeNode<>('D'));
root.getLeft().setRight(new TreeNode<>('E'));
root.getLeft().getRight().setLeft(new TreeNode<>('G'));
root.setRight(new TreeNode<>('C'));
root.getRight().setRight(new TreeNode<>('F')); preOrder(root);//A B D E G C F
System.out.println();
inOrder(root);//D B G E A C F
System.out.println();
postOrder(root);//D G E B F C A
System.out.println();
levelOrder(root);//A B C D E F G
}

求树的深度

树结点类的代码和上面一样。测试用的树也和上面一样。

求二叉树深度的代码(递归):

public class TreeDepth {
public static int treeDepth(TreeNode node) {
if (node == null) return 0;
return Math.max(treeDepth(node.getLeft()), treeDepth(node.getRight())) + 1;
} public static void main(String[] args) {
//创建一颗树,一个样例
TreeNode<Character> root = new TreeNode<>('A');
root.setLeft(new TreeNode<>('B'));
root.getLeft().setLeft(new TreeNode<>('D'));
root.getLeft().setRight(new TreeNode<>('E'));
root.getLeft().getRight().setLeft(new TreeNode<>('G'));
root.setRight(new TreeNode<>('C'));
root.getRight().setRight(new TreeNode<>('F')); int depth = treeDepth(root);
System.out.println(depth);//4
}
}  

求二叉树叶子节点个数:

树结点类的代码和上面一样。测试用的树也和上面一样。

求二叉树叶子结点的代码(递归):

public class LeafCounter {
public static int leafCount(TreeNode node) {
if (node == null) return 0;
if (node.getLeft() == null && node.getRight() == null) return 1;
return leafCount(node.getLeft()) + leafCount(node.getRight());
} public static void main(String[] args) {
//创建一颗树,一个样例
TreeNode<Character> root = new TreeNode<>('A');
root.setLeft(new TreeNode<>('B'));
root.getLeft().setLeft(new TreeNode<>('D'));
root.getLeft().setRight(new TreeNode<>('E'));
root.getLeft().getRight().setLeft(new TreeNode<>('G'));
root.setRight(new TreeNode<>('C'));
root.getRight().setRight(new TreeNode<>('F')); int count = leafCount(root);
System.out.println(count);//3
}
}

  

二叉树遍历等基本操作(Java实现)的更多相关文章

  1. java 二叉树遍历

    package com.lever; import java.util.LinkedList;import java.util.Queue; /** * 二叉树遍历 * @author lckxxy ...

  2. javascript实现数据结构: 树和二叉树,二叉树的遍历和基本操作

    树型结构是一类非常重要的非线性结构.直观地,树型结构是以分支关系定义的层次结构. 树在计算机领域中也有着广泛的应用,例如在编译程序中,用树来表示源程序的语法结构:在数据库系统中,可用树来组织信息:在分 ...

  3. 二叉树遍历(Java实现)

    二叉树遍历(Java实现)   主要是二叉树的遍历,包括递归遍历和非递归遍历 import java.util.ArrayDeque; import java.util.ArrayList; impo ...

  4. python实现二叉树的遍历以及基本操作

    主要内容: 二叉树遍历(先序.中序.后序.宽度优先遍历)的迭代实现和递归实现: 二叉树的深度,二叉树到叶子节点的所有路径: 首先,先定义二叉树类(python3),代码如下: class TreeNo ...

  5. java数据结构之二叉树遍历的非递归实现

    算法概述递归算法简洁明了.可读性好,但与非递归算法相比要消耗更多的时间和存储空间.为提高效率,我们可采用一种非递归的二叉树遍历算法.非递归的实现要借助栈来实现,因为堆栈的先进后出的结构和递归很相似.对 ...

  6. 二叉树遍历-JAVA实现

    二叉树遍历分为前序.中序.后序递归和非递归遍历.还有层序遍历. //二叉树节点 public class BinaryTreeNode { private int data; private Bina ...

  7. 数据结构之二叉树篇卷三 -- 二叉树非递归遍历(With Java)

    Nonrecursive Traversal of Binary Tree First I wanna talk about why we should <code>Stack</c ...

  8. 二叉树 遍历 先序 中序 后序 深度 广度 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  9. php实现二叉树遍历

    php实现二叉树遍历 一.总结 关注输入输出 二.php实现二叉树遍历 题目描述 编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储). 例如如下的先序遍历字符串 ...

随机推荐

  1. day2(字符串、格式化输出、运算符、流程控制)

    一.字符串 在Python中,加了引号的字符都被认为是字符串! 单引号.双引号.多引号的区别? 单引号和 双引号没有任何区别,但是某种情况下需要单双配合 如 msg = " My name ...

  2. 基于全志H3芯片的ARM开发环境搭建

    基于全志H3芯片的ARM开发环境搭建 最近买了个友善之臂的NanoPi M1板子,又在网上申请了个NanoPi NEO板子,这两个都是基于全志H3芯片的Crotex-A7四核ARM开发板,两个板子可以 ...

  3. mysql常用基础操作语法(三)~~对数据的增删改操作【命令行模式】

    1.插入单条数据:insert into tablename(字段名1,字段名2,...) values(值1,值2,...); 从图中可以看出,插入时不需要每个字段都有值(在没有相关的约束前提下), ...

  4. 初识Go语言

    一.Go语言的主要特性: ①    开放源代码的通用计算机编程语言.开放源代码的软件(以下简称开源软件)更容易被修正和改进. ②    虽为静态类型.编译型的语言,但go语言的语法却趋于脚本化,非常简 ...

  5. ASP.NET Core轻松入门Bind读取配置文件到C#实例

    首先新建一个ASP.NET Core空项目,命名为BindReader 然后 向项目中添加一个名为appsettings.json的json文件,为什么叫appsettings呢?  打开Progra ...

  6. jquery 动态获得主机地址

    var curWwwPath=window.document.location.href; alert("curWwwPath"+curWwwPath); curWwwPath  ...

  7. VS2010编译VS2008工程时,LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt

    1.问题 电脑上同时安装了VS2008,VS2010,使用VS2010编译VS2008建立的工程,或者,VS2010创建新的工程.编译时,出现以下链接错误: LINK : fatal error LN ...

  8. HNOI2008玩具装箱

    斜率优化 # include <stdio.h> # include <stdlib.h> # include <iostream> # include <s ...

  9. Spring Boot初探之数据库访问

    一.背景 Spring boot是集服务发布.数据库管理.日志管理等于一身的服务开发框架:是微服务开发的全能小帮手.这章讲述一下如何使用spring boot访问MySQL数据库. 二.搭建基础环境 ...

  10. Android Services (后台服务)

    一.简介 服务是可以在后台执行长时间运行的应用程序组件,它不提供用户界面. 另一个应用程序组件可以启动一个服务,并且即使用户切换到另一个应用程序,它仍然在后台运行. 另外,组件可以绑定到一个服务来与它 ...