栈,队列和二叉树的实现

来源:互联网 发布:linux安装mysql数据库 编辑:程序博客网 时间:2024/05/18 16:19
1.栈
public class Stack {
private T[] arr = (T[]) new Object[1];
private int n = 0;
public boolean isEmpty(){
return n == 0;
}
public int size(){
return n;
}
public void resize(int max){
T[] temp = (T[]) new Object[max];
for(int i = 0; i < n; i++){
temp[i] = arr[i];
}
arr = temp;
}

public boolean push(T t){
if(n == arr.length){
resize(n*2);
}
arr[n++] = t;
return true;
}
public T pop(){
if(isEmpty()){
//空栈
return null;
}
if(n <= arr.length/4){
//调整栈的大小
resize(arr.length/2);
}
return arr[--n];
}
}
2.队列
public class Queue {

private Node head;
private Node tail;
private int n = 0;
private class Node{
T value;
Node nextNode;
}
public boolean isEmpty(){
return n == 0;
}
public int size(){
return n;
}
public boolean enQueue(T t){
Node oldLast = tail;
tail = new Node();
tail.value = t;
tail.nextNode = null;
if(isEmpty()){
head =tail;
}else{
oldLast.nextNode = tail;
}
n++;
return true;
}
public T deQueue(){
if(isEmpty()){
//队列为空
return null;
}
Node lastHead = head;
head = head.nextNode;
n--;
return lastHead.value;
}
}

3 二叉树
public class TreeNode {
private T value;
private TreeNode leftNode;
private TreeNode rightNode;
public void init(T t){
value = t;
}
public TreeNode findNode(T t){
if(t.equals(value)){
return this;
}
TreeNode ptr = null;
if(leftNode != null){
if((ptr=leftNode.findNode( t)) != null){
return ptr;
}
}
if(rightNode != null){
if((ptr = rightNode.findNode( t)) != null){
return ptr;
}
}
return null;
}
public boolean insert( T t){
TreeNode node = new TreeNode<>();
node.value = t;
if(leftNode == null){
leftNode = node;
return true;
}
if(rightNode == null){
rightNode = node;
return true;
}
return false;
}
public int depth(){
if(leftNode == null && rightNode == null){
return 1;
}
int leftDepth = leftNode.depth();
int rightDepth = rightNode.depth();
return leftDepth > rightDepth ? leftDepth+1 :rightDepth+1;
}
public void levelTree(){
//节点队列
Queue> queue = new Queue<>();
//值队列
Queue valueQueue = new Queue<>();
//根节点的值加入值队列
valueQueue.enQueue(this.value);
//左子节点加入队列
if(leftNode != null){
queue.enQueue(leftNode);
}
//右子节点加入队列
if(rightNode != null){
queue.enQueue(rightNode);
}
while(!queue.isEmpty()){
TreeNode node = queue.deQueue();
if(node.leftNode != null){
queue.enQueue(node.leftNode);
}
if(node.rightNode != null){
queue.enQueue(node.rightNode);
}
valueQueue.enQueue(node.value);
}
while(!valueQueue.isEmpty()){
System.out.println(valueQueue.deQueue());
}
}
public void leftTree(){
if(leftNode != null){
leftNode.leftTree();
}
System.out.println(this.value);
if(rightNode != null){
rightNode.leftTree();
}
}
public void midTree(){
System.out.println(this.value);
if(leftNode != null){
leftNode.midTree();
}
if(rightNode != null){
rightNode.midTree();
}
}
}
原创粉丝点击