package d13删除二叉树节点;
public class Node {
public long date;
public String sData;
public Node leftChild;
public Node rightChild;
public Node(long value,String sData){
this.date=value;
this.sData=sData;
}
}
package d13删除二叉树节点;
public class Tree {
public Node root;
public void insert(long value,String aValue){
Node newNode =new Node(value,aValue);
Node current = root;
Node parent;
if(root==null){
root=newNode;
return;
}else{
while(true){
parent = current;
if(current.date>value){
current = current.leftChild;
if(current==null){
parent.leftChild=newNode;
return;
}
}else{
current = current.rightChild;
if(current==null){
parent.rightChild=newNode;
return;
}
}
}
}
}
public Node find(long value){
Node current = root;
while(current.date>value){
if(current.date>value){
current = current.leftChild;
}else{
current=current.rightChild;
}
if(current==null){
return null;
}
}
return current;
}
public boolean delete(long value){
Node current = root;
Node parent = root;
boolean isLeftChild = true;
while(current.date!=value){
parent = current;
if(current.date>value){
current = current.leftChild;
isLeftChild=true;
}else{
current=current.rightChild;
isLeftChild=false;
}
if(current==null){
return false;
}
}
if(current.leftChild==null&¤t.rightChild==null){
if(current==root){
root=null;
}
else if(isLeftChild){
parent.leftChild=null;
}else{
parent.rightChild=null;
}
}
else if(current.rightChild==null){
if(current==root){
root=current.leftChild;
}
else if(isLeftChild){
parent.leftChild=current.leftChild;
}else{
parent.rightChild=current.leftChild;
}
}else if(current.leftChild==null){
if(current==root){
root=current.rightChild;
}
else if(isLeftChild){
parent.leftChild=current.rightChild;
}else{
parent.rightChild=current.rightChild;
}
}
else{
Node successor = getSuccessor(current);
if(current==root){
root=successor;
}else if (isLeftChild){
parent.leftChild=successor;
}else{
parent.rightChild=successor;
}
successor.leftChild=current.leftChild;
}
return true;
}
public Node getSuccessor(Node delNode){
Node successor = delNode;
Node successorParent = delNode;
Node current = delNode.rightChild;
while(current!=null){
successorParent = successor;
successor = current;
current = current.leftChild;
}
if(successor!=delNode.rightChild){
successorParent.leftChild=successor.rightChild;
successor.rightChild=delNode.rightChild;
}
return successor;
}
public void frontOrder (Node localNode){
if(localNode!=null){
System.out.println(localNode.date+","+localNode.sData);
frontOrder(localNode.leftChild);
frontOrder(localNode.rightChild);
}
}
public void inOrder(Node localNode){
if(localNode!=null){
inOrder(localNode.leftChild);
System.out.println(localNode.date+","+localNode.sData);
inOrder(localNode.rightChild);
}
}public void lastOrder(Node localNode){
if(localNode!=null){
inOrder(localNode.leftChild);
inOrder(localNode.rightChild);
System.out.println(localNode.date+","+localNode.sData);
}
}
}