java 树形结构增删改查_二叉树的JAVA实现-二叉树的增删改查CRUD

package org.lyk.entities;

import java.util.HashMap;

import java.util.Map;

import org.lyk.interfaces.IBiTree;public class BiTree> implements IBiTree{private class Node>{privateN data;private Nodeleft;private Noderight;privateNode(N data)

{if (null ==data)return;this.data =data;

}public voidaddWithOrder(N data)

{//if(this.data.compareTo(data) < 0)

if (data.compareTo(this.data) < 0)

{if (null == this.left)

{this.left = new Node(data);

BiTree.this.count++;

}else

this.left.addWithOrder(data);

}else{if (null == this.right)

{this.right = new Node(data);

BiTree.this.count++;

}else

this.right.addWithOrder(data);

}

}public voidtoArrayFirst(Object[] retVal)

{

retVal[BiTree.this.foot++] = this.data;if (null != this.left)this.left.toArrayFirst(retVal);if (null != this.right)this.right.toArrayFirst(retVal);

}public voidtoArrayMiddle(Object[] retVal)

{if (null != this.left)this.left.toArrayMiddle(retVal);

retVal[BiTree.this.foot++] = this.data;if (null != this.right)this.right.toArrayMiddle(retVal);

}public voidtoArrayLast(Object[] retVal)

{if (null != this.left)this.left.toArrayLast(retVal);if (null != this.right)this.right.toArrayLast(retVal);

retVal[BiTree.this.foot++] = this.data;

}

}private int count = 0;private Node root = null;private int foot = 0;

@Overridepublic voidaddWithOrder(T data)

{if (null ==data)return;if (null == this.root)

{this.root = new Node(data);this.count++;

}else{this.root.addWithOrder(data);

}

}

@Overridepublic voidaddFirst(T[] data, T endFlag)

{if (null ==data)

{return;

}this.foot = 0;this.root = this.addFirstInternal(data, endFlag, this.root);

}private Node addFirstInternal(T[] data, T endFlag, Nodenode)

{if (data[this.foot].equals(endFlag))

{this.foot++;return null;

}else{

node.data= data[this.foot];this.foot++;

node.left= this.addFirstInternal(data, endFlag, node.left);

node.right= this.addFirstInternal(data, endFlag, node.right);returnnode;

}

}

@OverridepublicObject[] toArrayFirst()

{if (this.isEmpty())return null;

Object[] retVal= new Object[this.count];this.foot = 0;this.root.toArrayFirst(retVal);returnretVal;

}

@OverridepublicObject[] toArrayMiddle()

{if (this.isEmpty())return null;

Object[] retVal= new Object[this.count];this.foot = 0;this.root.toArrayMiddle(retVal);returnretVal;

}

@OverridepublicObject[] toArrayLast()

{if (this.isEmpty())return null;

Object[] retVal= new Object[this.count];this.foot = 0;this.root.toArrayLast(retVal);returnretVal;

}

@Overridepublic intsize()

{return this.count;

}

@Overridepublicboolean isEmpty()

{if (0 == this.count && null == this.root)return true;else

return false;

}

@Overridepublic voiddelete(T data)

{if (this.isEmpty())return;

Map nodeDel = this.find(data);if (null ==nodeDel)return;

Node node = (Node) nodeDel.get("node");

Node parent = (Node) nodeDel.get("parent");

String direction= (String) nodeDel.get("direction");if (null == node.left && null ==node.right)

{if (null ==direction)

{this.root = null;

}else{if ("left".equals(direction))

{

parent.left= null;

}else if ("right".equals(direction))

{

parent.right= null;

}

}this.count--;return;

}if (null != node.left && null ==node.right)

{//该节点只有左子树

if (null ==direction)

{

Node temp = this.root;this.root = this.root.left;

temp.left= null;

}else{if ("left".equals(direction))

{

parent.left=node.left;

node.left= null;

}else if ("right".equals(direction))

{

parent.right=node.left;

node.left= null;

}

}this.count--;return;

}if (null == node.left && null !=node.right)

{//该节点只有右子树

if (null ==direction)

{

Node temp = this.root;this.root = this.root.right;

temp.right= null;

}else{if ("left".equals(direction))

{

parent.left=node.right;

node.right= null;

}else if ("right".equals(direction))

{

parent.right=node.right;

node.right= null;

}

}this.count--;return;

}

Node subsessor = this.getSubsessor(node);if (null !=subsessor)

{//System.out.println("subsessor:" + subsessor.data);

subsessor.left =node.left;if (null ==direction)

{this.root =subsessor;

}else if ("left".equals(direction))

{

parent.left=subsessor;

}else if ("right".equals(direction))

{

parent.right=subsessor;

}this.count--;

}

}private Node getSubsessor(NodenodeDel)

{

Node parent =nodeDel;

Node subsessor =nodeDel.right;

subsessor= this.getSubsessorInternal(parent, subsessor, nodeDel);returnsubsessor;

}private Node getSubsessorInternal(Node parent, Node subsessor, NodenodeDel)

{if (null !=subsessor.left)

{

parent=subsessor;

subsessor=subsessor.left;returngetSubsessorInternal(parent, subsessor, nodeDel);

}else{if (subsessor !=nodeDel.right)

{

parent.left=subsessor.right;

subsessor.right=nodeDel.right;

}returnsubsessor;

}

}private Mapfind(T data)

{return this.findInternal(this.root, null, null, data);

}private Map findInternal(Node node, Nodeparent, String direction, T data)

{

Map retVal = null;if(node.data.equals(data))

{

retVal= new HashMap<>();

retVal.put("node", node);

retVal.put("parent", parent);

retVal.put("direction", direction);returnretVal;

}else{if (null !=node.left)

{//parent = node;//node = node.left;

retVal = this.findInternal(node.left, node, "left", data);if(null !=retVal)returnretVal;

}if (null !=node.right)

{//parent = node;//node = node.right;

retVal = this.findInternal(node.right, node, "right", data);if(null !=retVal)returnretVal;

}

}returnretVal;

}

@Overridepublicboolean contains(T data)

{//TODO Auto-generated method stub

return false;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值