树的各种操作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; ...
随机推荐
- Train Problem II(卡特兰数 组合数学)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1023 Train Problem II Time Limit: 2000/1000 MS (Java/ ...
- link 标签中“rel=stylesheet”的作用
最近在复习我的培训项目学子商城项目的时候在引入外部css的时候忘记加上了rel=stylesheet(因为以前看别人给的模板有所以就加了上去,所以并没有太大印象) 那rel=stylesheet到底起 ...
- SQL Server 2005 中的分区表和索引
SQL Server 2005 中的分区表和索引 SQL Server 2005 69(共 83)对本文的评价是有帮助 - 评价此主题 发布日期 : 3/24/2005 | 更新 ...
- Bash编程(5) Shell方法
shell的方法在相同的进程内执行,与调用它的脚本一致.对于方法来说,脚本中的所有变量均可见,且不需要执行export.方法中可以创建局部变量,且不影响正在调用的脚本. 1. 定义语法 (1) Kor ...
- Ubuntu apache
Linux系统为Ubuntu 1. 启动apache服务 # /etc/init.d/apache2 start 2. 重启apache服务 # /etc/init.d/apache2 restart ...
- python 正则表达式应用——缩写词扩充
看具体示例 import re def expand_abbr(sen, abbr): lenabbr = len(abbr) ma = '' for i in range(0, lenabbr): ...
- .NET环境下的DPAPI加密编程
Windows的本地加密保护机制提供了简单的调用接口,密钥的生成.保护等事项一概由系统来处理,其编程接口称为DPAPI.这一加密保护机制的边界是用户登录帐户或者本地计算机系统,使用操作系统设定的加密处 ...
- Java绘制图片并进行合成
以下代码可以生成六行两列的图片,代码改成了可以接受参数可循环的. package com.xgt.util; import com.sun.image.codec.jpeg.JPEGCodec; im ...
- java POST 传值 加签 验证
话不多说,代码如下 package com.syl.test_key; import lombok.extern.slf4j.Slf4j; import org.apache.commons.code ...
- 获取单个checkbox选中项
1.获取单个checkbox选中项(三种写法)$("input:checkbox:checked").val()或者$("input:[type='checkbox']: ...