<table cellspacing="0" cellpadding="0"><tr><td class="t_f" id="postmessage_34501"> 주로 이진 트리의 일반적인 사용법을 구현합니다. 일부 오류가 수정될 수 있기를 바랍니다. <div class="blockcode"> <div id="code_QuO"><ol> <li>패키지 구조.트리;</li> <li> <li>공용 클래스 노드 {</li> <li> <li> public int idata;</li> <li> public double ddata;</li> <li> 공용 노드 leftNode ;</li> <li> public Node rightNode;</li> <li> </li> <li> public Node() {</li> <li> </li> <li> }</li> <li> </li> <li> public void display() {// отй╬╫з╣Ц </li> <li> 시스템 .out.print('{');</li> <li> System.out.print(idata);</li> <li> System.out.print(',');</li> <li> System.out.print(ddata);</li> <li> System.out.print('}');</li> <li> }</li> <li>}</li> <li> </ol></div> <em onclick="copycode($('code_QuO'));">코드 복사</em> </div>[코드]패키지 구조.트리; 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("</td></tr></table> <div id="comment_34501" class="cm"> </div> <div id="post_rate_div_34501"></div> <br><br>