Node.java
public class Node {
int data;
Node left;
Node right;
public Node(int data){
this.data = data;
}
}
Tree.java
public class Tree {
public Node root;
public Tree(){
this.root = null;
}
public Node addNode(int data){
Node node = new Node(data);
if(root==null){
root = node;
return root;
}
if(data<=root.data){
root.left = getNode(root.left,data);
}else{
root.right = getNode(root.right, data);
}
return root;
}
public Node getNode(Node node,int data){
if(node==null){
node = new Node(data);
return node;
}
if(data<=node.data){
node.left = getNode(node.left,data);
}else{
node.right = getNode(node.right, data);
}
return node;
}
//前序遍历
public void preOrder(Node root){
if(root!=null){
System.out.print(root.data+" ");
preOrder(root.left);
preOrder(root.right);
}
}
//查找是否有key值
public boolean searchNode(Node root,int key){
if(root!=null){
if(key==root.data){
return true;
}else if(key<root.data){
return searchNode(root.left, key);
}else{
return searchNode(root.right, key);
}
}
return false;
}
public Node find(int key){
Node curr = root;
while(curr!=null){
if(curr.data==key){
return curr;
}else if(key<curr.data){
curr = curr.left;
}else{
curr = curr.right;
}
}
return curr;
}
//删除节点
public void deleteBST(int key){
delete(root, key);
}
public Node delete(Node node,int key){
if(node==null){
return null;
}
if(key<node.data){
node.left = delete(node.left, key);
}else if(key>node.data){
node.right = delete(node.right, key);
}else{
if(node.left==null||node.right==null){
node= node.left == null ? node.right:node.left;
}else{
Node temp = node;
Node s = node;
s = s.left;
while(s.right!=null){
temp = s;
s = s.right;
}
if(temp==node){
temp.left = s.left;
}else{
temp.right = s.left;
}
}
}
return node;
}
}
testTree.java
import java.util.Scanner;
public class testTree {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
Tree tree = new Tree();
for (int i = 0; i < n; i++) {
tree.addNode(arr[i]);
}
tree.preOrder(tree.root);
System.out.println();
System.out.println(tree.searchNode(tree.root, 9));
tree.deleteBST(0);
tree.preOrder(tree.root);
}
}