java实现二叉树
来源:互联网 发布:ubuntu启动网络服务 编辑:程序博客网 时间:2024/06/08 11:51
学了一下使用java实现二叉树,以下是实现的代码,仅供参考。
先创建一个节点类:
package tree;public class TreeNode { private Object value; private TreeNode leftNode; private TreeNode rightNode; public Object getValue() { return value; } public void setValue(Object value) { this.value = value; } public TreeNode getLeftNode() { return leftNode; } public void setLeftNode(TreeNode leftNode) { this.leftNode = leftNode; } public TreeNode getRightNode() { return rightNode; } public void setRightNode(TreeNode rightNode) { this.rightNode = rightNode; }}
创建一个树类:
package tree;public class Tree { private TreeNode node; public TreeNode getNode() { return node; } public void setNode(TreeNode node) { this.node = node; }}
创建一个队列,用来存放节点(用来实现递归)
package tree;import java.util.LinkedList;//定义一个队列public class Queue { //用list来实现队列 private LinkedList<TreeNode> list; //初始化的时候就new一个队列 public Queue(){ list=new LinkedList<TreeNode>(); } //节点入队列 public void enQueue(TreeNode node){ this.list.add(node); } //节点出队列,并返回这个节点 public TreeNode outQueue(){ return list.removeFirst(); } //判断队列是否为空 public boolean isEmpty(){ return this.list.isEmpty(); } public LinkedList<TreeNode> getList() { return list; } public void setList(LinkedList<TreeNode> list) { this.list = list; }}
创建一个二叉树类(其中包含插入节点和三种遍历方法,都用到了递归的思想):
package tree;public class BinaryTree { private Tree tree; private Queue queue; public BinaryTree(){ tree=new Tree(); } public void insertNode(TreeNode node){ //如果树为空则设这个设这个节点 if(tree.getNode()==null){ tree.setNode(node); return; //如果不为空,这个树的节点进队 }else{ queue=new Queue(); queue.enQueue(tree.getNode()); while(!queue.isEmpty()){ TreeNode temp=queue.outQueue(); if(temp.getLeftNode()==null){ temp.setLeftNode(node); return; }else if(temp.getRightNode()==null){ temp.setRightNode(node); return; }else{ queue.enQueue(temp.getLeftNode()); queue.enQueue(temp.getRightNode()); } } } } public Tree getTree() { return tree; } //三种遍历方法 //先序遍历 public void frontOrder(TreeNode node){ if(node!=null){ System.out.println(node.getValue()); this.frontOrder(node.getLeftNode()); this.frontOrder(node.getRightNode()); } } //中序遍历 public void midOrder(TreeNode node){ if(node!=null){ this.midOrder(node.getLeftNode()); System.out.println(node.getValue()); this.midOrder(node.getRightNode()); } } //后序遍历 public void lastOrder(TreeNode node){ if(node!=null){ this.lastOrder(node.getLeftNode()); this.lastOrder(node.getRightNode()); System.out.println(node.getValue()); } }}
最后写一个测试代码:
package tree;public class TestBinaryTree { public static void main(String[] args) { BinaryTree binaryTree=new BinaryTree(); TreeNode[]nodes= new TreeNode[10]; for(int i=0;i<nodes.length;i++){ nodes[i]=new TreeNode(); nodes[i].setValue(i); binaryTree.insertNode(nodes[i]); } System.out.println("先序遍历"); binaryTree.frontOrder(binaryTree.getTree().getNode()); System.out.println("中序遍历"); binaryTree.midOrder(binaryTree.getTree().getNode()); System.out.println("后序遍历"); binaryTree.lastOrder(binaryTree.getTree().getNode()); }}
控制台输出:
先序遍历0137849256中序遍历7381940526后序遍历7839415620
阅读全文
0 0
- JAVA 实现二叉树
- 二叉树 java实现
- 二叉树实现-java
- JAVA 实现二叉树。
- 二叉树Java实现
- java实现二叉树
- 二叉树Java实现
- Java实现二叉树
- Java实现二叉树
- 二叉树java实现
- java 实现二叉树
- 二叉树--java实现
- Java实现二叉树
- java实现二叉树
- 二叉树Java实现
- java实现二叉树
- 二叉树java实现
- java实现二叉树
- HDU
- Java8新特性方法引用、构造器引用、数组引用
- Add Two Numbers
- 软件工程学习思考
- hbase shell命令
- java实现二叉树
- JavaScript利用HTML DOM进行文档操作的方法
- oracle用户与表空间关系
- Let the Balloon Rise
- hdu 1429
- 分词算法模型学习笔记(一)——HMM
- MySQL主从复制性能优化
- iOS 【野路子】获取WKWebView内容高度做H5原生连接
- 优化hive