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

树的结点类代码:

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. perl的foreach循环的坑

    最近在写perl脚本的时候用foreach遍历hash的时候,出现遇到了一个问题,就是说当hash为一层的时候,并不会有问题,但是当hash类型结构比较复杂的时候,就会有需要注意的地方了. 还是举例子 ...

  2. Ansible自动化运维笔记3(playbook)

    1.基本语法 playbook文件格式为yaml语法.示例如下: 1.1 nginx.yaml --- - hosts: all tasks: - name: Install Nginx Packag ...

  3. AES对称加密

    import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.Secre ...

  4. Ubuntu16.04安装搜狗输入法后有黑边问题的解决方法

    apt-get install compton compton -b

  5. Linux PCI/PCI-E设备配置空间读取与修改

    Linux PCI/PCI-E设备配置空间读取与修改 1 前言 PCI和PCI Express,是计算机常使用的一种高速总线.操作系统中的PCI/PCI-E设备驱动以及操作系统内核,都需要访问PCI及 ...

  6. 常用u-boot命令详解(全)

    U-boot发展到现在,他的命令行模式已经非常接近Linux下的shell了,命令行模式模式下支持"Tab"键的命令补全和命令的历史记录功能.而且如果你输入的命令的前几个字符和别的 ...

  7. Flex中的FusionCharts 3D饼图

    1.3D饼图设计源码 <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns: ...

  8. Java之split()方法

    Java之split()方法 1.方法介绍 (1)public String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串 (2)public String[] s ...

  9. JavaWeb中jsp九大内置对象 和四大作用域

    九大内置对象为 page request response session exception config application out pageContext no 内置对象  类型 1 pag ...

  10. class-提升方法Boosting

    1 AdaBoost算法2 AdaBoost训练误差分析3 AdaBoost algorithm 另外的解释3.1 前向分步算法3.2 前向分步算法与AdaBoost4 提升树4.1 提升树模型4.2 ...