이진 트리 부분 함수 구현(JAVA)
풀어 주다: 2016-07-25 09:02:30
주로 이진 트리의 일반적인 사용법을 구현합니다. 일부 오류가 수정될 수 있기를 바랍니다.
- 패키지 구조.트리;
-
- 공용 클래스 노드 {
-
- public int idata;
- public double ddata;
- 공용 노드 leftNode ;
- public Node rightNode;
-
- public Node() {
-
- }
-
- public void display() {// отй╬╫з╣Ц
- 시스템 .out.print('{');
- System.out.print(idata);
- System.out.print(',');
- System.out.print(ddata);
- System.out.print('}');
- }
- }
-
코드 복사
[코드]패키지 구조.트리;
java.util.Stack 가져오기;
공개 클래스 트리 {
/* 노드 속성, 트리는 노드로 구성됨 */
개인 노드 루트;
공개 트리() {
루트 = null;
}
/*** 지정된 키 값을 갖는 트리 노드 찾기
*
* @param 키
* @반품*/
공개 노드 찾기(int 키) {
노드 전류 = 루트;
while(current.idata != 키) {
if(키 키) {
isLeftNode = true;
현재 = 현재.leftNode;
}
else if(current.idata 키) {
isLeftNode = true;
현재 = 현재.leftNode;
} 또 다른 {
isLeftNode = 거짓;
현재 = current.rightNode;
}
if(current == null) {//해당 지정된 노드를 찾을 수 없습니다.
플래그 = 거짓;
반환 플래그;
}
}//While 루프를 종료합니다.
// 여기까지 실행한다는 것은 현재 삭제할 노드를 찾는다는 뜻이다.
//삭제된 노드는 리프 노드입니다.
if(current.leftNode == null && current.rightNode == null) {
if(isLeftNode == true)
parent.leftNode = null;
또 다른
parent.rightNode = null;
}
//삭제된 노드에는 왼쪽 자식 노드만 있습니다.
else if(current.rightNode == null) {
if(현재 == 루트)
루트 = current.leftNode;
그렇지 않은 경우(isLeftNode)
parent.leftNode = 현재.leftNode;
또 다른
parent.rightNode = current.leftNode;
}
//삭제된 노드에는 올바른 자식 노드만 있습니다.
else if(current.leftNode == null) {
if(현재 == 루트)
루트 = current.rightNode;
그렇지 않은 경우(isLeftNode)
parent.leftNode = current.rightNode;
또 다른
parent.rightNode = 현재.rightNode;
}
//삭제된 노드에는 왼쪽 자식 노드와 오른쪽 자식 노드가 있습니다.
또 다른 {
노드 교체Node = getReplacedNode(현재);
if(현재 == 루트)
루트 = 교체된 노드;
그렇지 않은 경우(isLeftNode)
parent.leftNode = 교체된 노드;
또 다른
parent.rightNode = 교체된 노드;
}
반환 플래그;
}
/*** 선택 순회 방법 결정
*
* @param 트래버스 유형*/
공공 무효 트래버스(int traverseType) {
스위치(트래버스 유형) {
사례 1:
System.out.print("n개의 선주문 순회:");
사전주문(루트);
부서지다;
사례 2:
System.out.print("n 순회:");
inOrder(루트);
부서지다;
사례 3:
System.out.print("n 후순 순회:");
postOrder(루트);
부서지다;
}
System.out.println();
}
/*** 순서대로 정렬*/
개인 무효 preOrder(노드 노드) {
if(노드 != null) {
System.out.print(node.idata " ");
preOrder(node.leftNode);
preOrder(node.rightNode);
}
}
/*** 중간순으로 정렬*/
개인 무효 inOrder(노드 노드) {
if(노드 != null) {
preOrder(node.leftNode);
System.out.print(node.idata " ");
preOrder(node.rightNode);
}
}
/*** 내림차순으로 정렬*/
개인 무효 postOrder(노드 노드) {
if(노드 != null) {
preOrder(node.leftNode);
preOrder(node.rightNode);
System.out.print(node.idata " ");
}
}
/*** [삭제된 노드]를 대체하는 노드를 찾고, [교체 지점]을 루트로 하는 하위 트리를 구성합니다.
* 설명: [삭제된 노드]의 오른쪽 하위 트리에서 가장 작은 키 값을 갖는 지점을 [대체 노드]로 찾습니다. 이는 분명히 오른쪽 하위 트리의 왼쪽 리프 노드(있는 경우)입니다.
*
* @param delNode
* @반품*/
개인 노드 getReplacedNode(노드 delNode) {
노드 현재 = delNode.rightNode;
교체된 노드Node = delNode;
노드 교체ParentNode = delNode;
while(현재 != null) {
replacementParentNode = 교체된 노드;
교체된 노드 = 현재;
현재 = 현재.leftNode;
}if(replacedNode != delNode.rightNode) {
// 교체Node就是要替换掉【被删除节点】的节点
교체된ParentNode.leftNode = 교체된Node.rightNode;
replacementNode.rightNode = delNode.rightNode;
}
replacementNode.leftNode = delNode.leftNode;
교체된 노드를 반환합니다.
}
/*** 트리 구조 표시
*
* @param 노드*/
@SuppressWarnings("선택 해제됨")
공공 무효 디스플레이 트리() {
System.out.println(" |
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
-
2024-10-22 09:46:29
-
2024-10-13 13:53:41
-
2024-10-12 12:15:51
-
2024-10-11 22:47:31
-
2024-10-11 19:36:51
-
2024-10-11 15:50:41
-
2024-10-11 15:07:41
-
2024-10-11 14:21:21
-
2024-10-11 12:59:11
-
2024-10-11 12:17:31