자바 로 두 갈래 검색 트 리 구현
6678 단어 자바두 갈래 검색 트 리이 진 트 리
특징:이 진 트 리 의 중간 순 서 를 옮 겨 다 니 는 결 과 는 질서 가 있 습 니 다(오름차 순)!
두 갈래 검색 트 리 구현
class Node
public class BST {
static class Node {
private int key;
private Node left;
private Node right;
public Node(int key) {
this.key = key;
}
}
private Node root;//BST
}
두 갈래 검색 트 리 찾기key
/**
*
*
* : :
* ① , ,
* ② , ,
*
* @param key key
* @return boolean
*/
public boolean find(int key) {
Node cur = root;
while (cur != null) {
if (key < root.key) {
cur = cur.left;
} else if (key > root.key) {
cur = cur.right;
} else {
return true;
}
}
return false;
}
두 갈래 검색 트 리 삽입parent
노드 가 필요 합 니 다.현재 노드 의 부모 노드 를 항상 기록 해 야 합 니 다.즉,key
key
.부모 노드 의 뒤쪽 에 꽂 으 면 된다.바로 적당 한 위치 이다.구체 적 으로 왼쪽 에 꽂 을 지 오른쪽 에 꽂 을 지 노드 의key
와parent
의key
/**
*
*
* :
*
* @param key
*/
public void insert(int key) {
if (root == null) { // , ,
root = new Node(key);
return;
}
Node cur = root;
Node parent = null; //parent cur
while (true) {
if (cur == null) { // , , ( )
if (parent.key < key) {
parent.right = new Node(key);
} else {
parent.left = new Node(key);
}
return;
}
if (key < cur.key) {
parent = cur;
cur = cur.left;
} else if (key > cur.key) {
parent = cur;
cur = cur.right;
} else {
throw new RuntimeException(" , key");
}
}
}
두 갈래 검색 트 리 삭제key
노드 를 먼저 찾 아야 하고 존재 하면 삭제 하고 존재 하지 않 으 면 삭제 오류root = delete.right;
II:삭제 할 노드 는 부모 노드 의 왼쪽 아이 입 니 다.parent.left = delete.right;
Ⅲ:삭제 할 노드 는 부모 노드 의 오른쪽 아이 입 니 다.parent.right = delete.right;
root = delete.left;
II:삭제 할 노드 는 부모 노드 의 왼쪽 아이 입 니 다.parent.left = delete.left;
Ⅲ:삭제 할 노드 는 부모 노드 의 오른쪽 아이 입 니 다.parent.right = delete.left;
I:찾 은 노드 의 부모 노드 는 삭제 할 노드 입 니 다.
delete.key = find.key;
findParent.right = find.right;
II:찾 은 노드 의 부모 노드 는 삭제 할 노드 가 아 닙 니 다.delete.key = find.key;
findParent.left = find.right;
/**
*
*
* :
*
* @param key
*/
public void remove(int key) {
if (root == null) {
throw new RuntimeException(" , !");
}
Node cur = root;
Node parent = null;
// key
while (cur != null) {
if (key < cur.key) {
parent = cur;
cur = cur.left;
} else if (key > cur.key) {
parent = cur;
cur = cur.right;
} else {
break;
}
}
if (cur == null) {
throw new RuntimeException(" key, key ");
}
//cur
//parent
/*
* 1:
*
* ①
* ②
*
*/
if (cur.left == null) {
if (cur == root) { //①
root = cur.right;
} else if (cur == parent.left) { //②
parent.left = cur.right;
} else { //③
parent.right = cur.right;
}
}
/*
* 2:
*
* :
*/
else if (cur.right == null) { //①
if (cur == root) {
root = cur.left;
} else if (cur == parent.left) { //②
parent.left = cur.left;
} else { //③
parent.right = cur.left;
}
}
/*
* 3:
*
* :
* , , , ,
* :
* ①
* ②
* ③ , ,
* ④
* ⑤
*
*/
else {
Node nextParent = cur; // ,
Node next = cur.right; // next ,
while (next.left != null) {
nextParent = next;
next = next.left;
}
cur.key = next.key; // ,
if (nextParent == cur) { // , ( next )
nextParent.right = next.right;
} else { // , next , .
nextParent.left = next.right;
}
}
}
자 바 를 이용 한 두 갈래 검색 트 리 구현 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 두 갈래 검색 트 리 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.