树的各种操作java
package mystudy; import java.io.UnsupportedEncodingException;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack; public class Tree { private TreeNode root; public Tree() { }; public Tree(TreeNode root) {
this.root = root;
} public void initTree() {
root = new TreeNode(8);
root.setLeft(new TreeNode(5));
root.getLeft().setLeft(new TreeNode(7));
root.getLeft().setRight(new TreeNode(4));
root.setRight(new TreeNode(9));
root.getRight().setRight(new TreeNode(6));
root.getRight().setLeft(new TreeNode(10));
} public void preOrderTraverse() {
preOrderTraverse(root);
} public void preOrderTraverse(TreeNode node) {
if (node != null) {
System.out.println(node.getValue());
preOrderTraverse(node.getLeft());
preOrderTraverse(node.getRight());
}
} public void nPreOrderTraverse() {
Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode node = root;
while (node != null || !stack.isEmpty()) {
while (node != null) {
System.out.println(node.getValue());
stack.push(node);
node = node.getLeft();
}
if (!stack.isEmpty()) {
node = stack.pop();
node = node.getRight();
}
}
} public void inOrderTraverse() {
inOrderTraverse(root);
} public void inOrderTraverse(TreeNode node) {
if (node != null) {
inOrderTraverse(node.getLeft());
System.out.println(node.getValue());
inOrderTraverse(node.getRight());
}
} public void nInOrderTraverse() {
Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode node = root;
while (node != null || !stack.isEmpty()) {
while (node != null) {
stack.push(node);
node = node.getLeft();
}
if (!stack.isEmpty()) {
node = stack.pop();
System.out.println(node.getValue());
node = node.getRight();
}
}
} public void postOrderTraverse() {
postOrderTraverse(root);
} public void postOrderTraverse(TreeNode node) {
if (node != null) {
postOrderTraverse(node.getLeft());
postOrderTraverse(node.getRight());
System.out.println(node.getValue());
}
} public void nPostOrderTraverse() {
Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode node = root;
TreeNode preNode = null;
while (node != null || !stack.isEmpty()) {
while (node != null) {
stack.push(node);
node = node.getLeft();
}
if (!stack.isEmpty()) {
node = stack.peek();
if (node.getRight() == null || node.getRight() == preNode) {
node = stack.pop();
System.out.println(node.getValue());
preNode = node;
node = null;
} else {
node = node.getRight();
}
}
} } public void levelTraverse() {
levelTraverse(root);
} public void levelTraverse(TreeNode node) {
if (node != null) {
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.offer(node);
while (!queue.isEmpty()) {
TreeNode mNode = queue.poll();
if (mNode != null) {
System.out.println(mNode.getValue());
if (mNode.getLeft() != null) {
queue.offer(mNode.getLeft());
}
if (mNode.getRight() != null) {
queue.offer(mNode.getRight());
}
}
}
}
} public int treeDepth() {
return treeDepth(root);
} public int treeDepth(TreeNode node) {
if (node == null) {
return 0;
}
int leftDepth = treeDepth(node.getLeft());
int rightDepth = treeDepth(node.getRight());
return leftDepth > rightDepth ? leftDepth + 1 : rightDepth + 1;
} public int minMaxSpan() {
Queue<TreeNode> queue = new LinkedList<TreeNode>();
if (root != null) {
int visitedNum = 0, addedNum = 1, levelNum = 1, min, max, depth = 0, minLevel = 0, maxLevel = 0;
min = max = root.getValue();
queue.offer(root);
while (!queue.isEmpty()) {
TreeNode mNode = queue.poll();
if (min > mNode.getValue()) {
min = mNode.getValue();
minLevel = depth;
} else if (max < mNode.getValue()) {
max = mNode.getValue();
maxLevel = depth;
}
visitedNum++;
if (mNode.getLeft() != null) {
queue.offer(mNode.getLeft());
addedNum++;
}
if (mNode.getRight() != null) {
queue.offer(mNode.getRight());
addedNum++;
}
if (visitedNum == levelNum) {
depth++;
levelNum = addedNum;
}
}
System.out.println("min:" + min + "max:" + max + "minLevel:"
+ minLevel + "maxLevel:" + maxLevel + "树的高度:" + depth);
return Math.abs(minLevel - maxLevel);
}
return -1;
} public class TreeNode {
private TreeNode left;
private TreeNode right;
private int value; public TreeNode(TreeNode left, TreeNode right, int value) {
this.left = left;
this.right = right;
this.value = value;
} public TreeNode(int value) {
this(null, null, 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 int getValue() {
return value;
} public void setValue(int value) {
this.value = value;
} } /**
* @param args
* @throws UnsupportedEncodingException
*/
public static void main(String[] args) throws UnsupportedEncodingException {
// TODO Auto-generated method stub
Tree tree = new Tree();
tree.initTree();
System.out.println("树中最大值最小值层数之差:" + tree.minMaxSpan());
System.out.println("前序递归:");
tree.preOrderTraverse();
System.out.println("前序非递归:");
tree.nPreOrderTraverse();
System.out.println("中序递归:");
tree.inOrderTraverse();
System.out.println("中序非递归:");
tree.nInOrderTraverse();
System.out.println("后序递归:");
tree.postOrderTraverse();
System.out.println("后序非递归:");
tree.nPostOrderTraverse();
System.out.println("按层次遍历:");
tree.levelTraverse();
System.out.println("树的高度:" + tree.treeDepth());
} }
树的各种操作java的更多相关文章
- hdu 3436 线段树 一顿操作
Queue-jumpers Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...
- 使用BeanUtils工具类操作Java bean
1.类的属性: 1).在Java EE中,类的属性通过setter和getter定义:类中的setter(getter)方法去除set(get)后剩余的部分就是类的属性 2).而之前叫的类的属性,即成 ...
- Arrays 类操作 Java 的数组排序
使用 Arrays 类操作 Java 中的数组 Arrays 类是 Java 中提供的一个工具类,在 java.util 包中.该类中包含了一些方法用来直接操作数组,比如可直接实现数组的排序.搜索等( ...
- 线段树区间更新操作及Lazy思想(详解)
此题题意很好懂: 给你N个数,Q个操作,操作有两种,‘Q a b ’是询问a~b这段数的和,‘C a b c’是把a~b这段数都加上c. 需要用到线段树的,update:成段增减,query:区间求 ...
- Splay伸展树入门(单点操作,区间维护)附例题模板
Pps:终于学会了伸展树的区间操作,做一个完整的总结,总结一下自己的伸展树的单点操作和区间维护,顺便给未来的自己总结复习用. splay是一种平衡树,[平均]操作复杂度O(nlogn).首先平衡树先是 ...
- 报表生成poi----java操作java对象生成execl表单
1.Apache POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能. .NET的开发人员则 ...
- 标准Trie字典树学习二:Java实现方式之一
特别声明: 博文主要是学习过程中的知识整理,以便之后的查阅回顾.部分内容来源于网络(如有摘录未标注请指出).内容如有差错,也欢迎指正! 系列文章: 1. 标准Trie字典树学习一:原理解析 2.标准T ...
- Android NDK开发 JNI操作java构造方法,普通方法,静态方法(七)
Android NDK开发 JNI操作java普通.静态.构造方法 1.Jni实例化一个Java类的实例jobject 1.通过FindClas( ),获取Java类的的jclass 2.通过GetM ...
- java实现树的一般操作
https://www.cnblogs.com/dawnyxl/p/9047437.html 树是数据结构中最基本的结构,今天的博客更新一下树的基本操作: 树的节点结构: package tree; ...
随机推荐
- C#串口通讯中常用的16进制的字节转换
1.对于通讯协议的十六进制数值进行简单转换 //二进制转十进制Console.WriteLine("二进制 111101 的十进制表示: "+Convert.ToInt32(&qu ...
- 关于DES加密内部收费版
数据加密算法(Data Encryption Algorithm,DEA)是一种对称加密算法,很可能是使用最广泛的密钥系统,特别是在保护金融数据的安全中,最初开发的DEA是嵌入硬件中的.通常,自动取款 ...
- Tomcat 9内存溢出:"http-apr-8080-Acceptor-0" java.lang.OutOfMemoryError: Direct buffer memory
Tomcat开启了APR模式,而APR模式会使用堆外内存,关于堆内存可从如下链接了解一下:http://blog.csdn.net/zhouhl_cn/article/details/6573213. ...
- uipath接入Python
安装UiPath.Python.Activities,然后会有五个.Activities,他们的功能分别如下: 本人原创,转发或引用请注明出处.
- Python取时间,日期的总结
import datetime from datetime import timedelta now = datetime.datetime.now() #今天 today = now #昨天 yes ...
- Robot Framework常用关键字介绍
常用关键字介绍 在学习一门编程语言的时候,大多教材都是从打印“hello world”开始.我们可以像编程语言一样来学习 Robot Framework.虽然通过 RIDE 提供“填表”一样的写测试用 ...
- selenium+Python(cookie处理)
cookie 处理本节重点: driver.get_cookies() 获得 cookie 信息 add_cookie(cookie_dict) 向 cookie 添加会话信息 delete_cook ...
- Google推荐的图片加载库Glide
英文原文 Introduction to Glide, Image Loader Library for Android, recommended by Google 首发地址 http://jco ...
- wms-ssv数据字典
--------------------------------------------以下,托盘-- dbo.Container --托盘 , "托盘状态", "Con ...
- [转]Entity Framework Sprocs with Multiple Result Sets
本文转自:https://msdn.microsoft.com/en-us/data/jj691402.aspx Entity Framework Sprocs with Multiple Resul ...