> 백엔드 개발 > PHP 튜토리얼 > 이진 트리 부분 함수 구현(JAVA)

이진 트리 부분 함수 구현(JAVA)

WBOY
풀어 주다: 2016-07-25 09:02:30
원래의
896명이 탐색했습니다.
주로 이진 트리의 일반적인 사용법을 구현합니다. 일부 오류가 수정될 수 있기를 바랍니다.
  1. 패키지 구조.트리;
  2. 공용 클래스 노드 {
  3. public int idata;
  4. public double ddata;
  5. 공용 노드 leftNode ;
  6. public Node rightNode;
  7. public Node() {
  8. }
  9. public void display() {// отй╬╫з╣Ц
  10. 시스템 .out.print('{');
  11. System.out.print(idata);
  12. System.out.print(',');
  13. System.out.print(ddata);
  14. System.out.print('}');
  15. }
  16. }
코드 복사
[코드]패키지 구조.트리; 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("


원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿