二叉树遍历等基本操作(Java实现)
前中后序遍历递归实现+层序遍历:
树的结点类代码:
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实现)的更多相关文章
- java 二叉树遍历
package com.lever; import java.util.LinkedList;import java.util.Queue; /** * 二叉树遍历 * @author lckxxy ...
- javascript实现数据结构: 树和二叉树,二叉树的遍历和基本操作
树型结构是一类非常重要的非线性结构.直观地,树型结构是以分支关系定义的层次结构. 树在计算机领域中也有着广泛的应用,例如在编译程序中,用树来表示源程序的语法结构:在数据库系统中,可用树来组织信息:在分 ...
- 二叉树遍历(Java实现)
二叉树遍历(Java实现) 主要是二叉树的遍历,包括递归遍历和非递归遍历 import java.util.ArrayDeque; import java.util.ArrayList; impo ...
- python实现二叉树的遍历以及基本操作
主要内容: 二叉树遍历(先序.中序.后序.宽度优先遍历)的迭代实现和递归实现: 二叉树的深度,二叉树到叶子节点的所有路径: 首先,先定义二叉树类(python3),代码如下: class TreeNo ...
- java数据结构之二叉树遍历的非递归实现
算法概述递归算法简洁明了.可读性好,但与非递归算法相比要消耗更多的时间和存储空间.为提高效率,我们可采用一种非递归的二叉树遍历算法.非递归的实现要借助栈来实现,因为堆栈的先进后出的结构和递归很相似.对 ...
- 二叉树遍历-JAVA实现
二叉树遍历分为前序.中序.后序递归和非递归遍历.还有层序遍历. //二叉树节点 public class BinaryTreeNode { private int data; private Bina ...
- 数据结构之二叉树篇卷三 -- 二叉树非递归遍历(With Java)
Nonrecursive Traversal of Binary Tree First I wanna talk about why we should <code>Stack</c ...
- 二叉树 遍历 先序 中序 后序 深度 广度 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- php实现二叉树遍历
php实现二叉树遍历 一.总结 关注输入输出 二.php实现二叉树遍历 题目描述 编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储). 例如如下的先序遍历字符串 ...
随机推荐
- 位置信息类API调用的代码示例合集:中国省市区查询、经纬度地址转换、POI检索等
以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 中国省市区查询:2017最新中国省市区地址 经纬度地址转换:经纬度 ...
- C语言老司机学Python (二)
标准数据类型: 共6种:Number(数字),String(字符串),List(列表),Tuple(元组),Sets(集合),Dictionary(字典) 本次学习主要是和数据类型混个脸熟,知道每样东 ...
- flask项目开发中,遇到http 413错误
在flask项目中,上传文件时后台报http 413 Request Entity Too Large 请求体太大错误! 解决的2种方法: 1.在flask配置中设置 MAX_CONTENT_LENG ...
- CEPH RGW 设置 user default_placement为ssd-placement,优化100KB-200KB小文件性能,使用户创建的bucket对象放置到 SSD设备的Pool上。
sudo radosgw-admin metadata get user:tuanzi > user.md.json vi user.md.json #to add ssd-placement ...
- 2.2 HOST主桥
本节以MPC8548处理器为例说明HOST主桥在PowerPC处理器中的实现机制,并简要介绍x86处理器系统使用的HOST主桥. MPC8548处理器是Freescale基于E500 V2内核的一个P ...
- 5.1 TLP的格式
当处理器或者其他PCIe设备访问PCIe设备时,所传送的数据报文首先通过事务层被封装为一个或者多个TLP,之后才能通过PCIe总线的各个层次发送出去.TLP的基本格式如图5?1所示. 一个完整的TLP ...
- DSP_TMS32F2812的串口操作
void scia_fifo_init(int ibaud) { SciaRegs.SCICCR.all =0x0007; // 1 stop bit, No loopback // No parit ...
- mysql常用基础操作语法(九)~~外连接查询【命令行模式】
1.左外连接left outer join或者left jion,outer可以省略不写,下边的右连接和全连接也一样: 左外连接的意思是,以left join左边的表中的数据为基准,即左边的表中有的必 ...
- Linux显示所有可更新的软件清单命令
Linux显示所有可更新的软件清单命令 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ yum check-update 程序"yum"尚未 ...
- 利用shell脚本实现对mysql数据库的备份
#!/bin/bash #保存备份个数 number=3 #备份保存路径 backup_dir=/root/mysqlbackup #日期 dd=`date +%Y%m%d` #备份工具 tool=m ...