BST

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);
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值