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

树的结点类代码:

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. 理解OAuth2.0认证

    一.什么是OAuth协议 OAuth 协议为用户资源的授权提供了一个安全的.开放而又简易的标准.与以往的授权方式不同之处是 OAuth的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方 ...

  2. python小练习之读取文件写入excel

    文件是个json文件 内容为: 导入excel后的格式为 屡一下思路 一步步怎么实现: 1 首先需要读取json文件 然后将读取的内容转为字典 2 将excel的列名写入一个list中 然后遍历执行写 ...

  3. JQuery基础知识学习1

    1.JQuery是javascript的类库 2.下载JQuery 3.导入JQuery <script src="jquery-3.0.0.js"></scri ...

  4. 笔记︱图像语义分割(FCN、CRF、MRF)、论文延伸(Pixel Objectness、)

    图像语义分割的意思就是机器自动分割并识别出图像中的内容,我的理解是抠图- 之前在Faster R-CNN中借用了RPN(region proposal network)选择候选框,但是仅仅是候选框,那 ...

  5. 5.3 存储器、I/O和配置读写请求TLP

    本节讲述PCIe总线定义的各类TLP,并详细介绍这些TLP的格式.在这些TLP中,有些格式对于初学者来说较难理解.读者需要建立PCIe总线中与TLP相关的一些基本概念,特别是存储器读写相关的报文格式. ...

  6. sparklyr包:实现Spark与R的接口+sparklyr 0.5

    本文转载于雪晴数据网 相关内容: sparklyr包:实现Spark与R的接口,会用dplyr就能玩Spark Sparklyr与Docker的推荐系统实战 R语言︱H2o深度学习的一些R语言实践-- ...

  7. ClientToScreen 和ScreenToClient 用法

    ClientToScreen( )是把窗口坐标转换为屏幕坐标 ScreenToClient( )是把屏幕坐标转换为窗口坐标 屏幕坐标是相对于屏幕左上角的,而窗口坐标是相对于窗口用户区左上角的 VC下, ...

  8. Windows Subsystem for Linux (WSL)挂载移动硬盘U盘

    WSL想通过移动硬盘处理一些数据,结果进去了无法发现移动硬盘,于是搜了好久也没有一个正确的解决办法,终于找到一个,现在贡献出来与大家共享. WSL比起linux挂载硬盘简单一些.而且windows本身 ...

  9. cmder默认的命令提示符λ改成$

    新版的cmder(2016.11.3测试)单纯修改init.bat或以前的方法都试过了不行,下面是我自己找到的方法.亲测可行. cmder\vendor\clink.lua文件中第41行中{lamb} ...

  10. FusionCharts MSBar2D图

    1.页面展示 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> ...