2017-01-15 2 views
-1

목록을 기반으로 이진 트리를 만들려고합니다. 목록에는 색인 0에 노드가 있고 색인 1과 2에는 왼쪽과 오른쪽 하위가 들어 있습니다. 인덱스 3에는 다른 노드가 있고 인덱스 4에는 5가 있고 인덱스 3에는 노드에 대한 왼쪽 및 오른쪽 자식이 있습니다. 나는 이런 것을 시도했다.Java의 목록에서 이진 트리를 만듭니다.

public static HNode buildHTree(List<HNode> list) { 
     HNode node = lista.get(0); 
     HNode left = lista.get(1); 
     HNode right = lista.get(2); 
     list.remove(0); 
     list.remove(0); 
     list.remove(0); 
     if(list.size() > 0) 
      return buildHTree(list); 
     return node; 
    } 

그러나 이것은 작동하지 않는다. 당신 중 일부는 나에게 약간의 힌트를 주거나 도움을 줄 수 있습니까? HNODE 클래스가 포함되어 이것에 대한

private Symbol value; 
private HNode left, right; 

와 세터와 게터. 당신에게 내 생각을 어떻게 내 목표를 달성하기 위해 코드를 변경 할 수 있습니다에 어떤 문제가 있는지 말해하려는

+3

*하지만 *이 문제가 설명되지 작동하지 않습니다. 우리 동정이나 원조를 원하십니까? – shmosel

+0

나는 내 생각에 무엇이 잘못되었는지 말해 주며 내 목표를 달성하기 위해 내 코드를 어떻게 바꿀 수 있는지 알고 싶습니다. – Lucy

+1

스택 오버플로에 오신 것을 환영합니다! 숙제 도움을 요청하는 것 같습니다. 우리는 그 자체로 아무런 문제가 없지만, 이러한 사항을 준수하십시오 (http://meta.stackoverflow.com/questions/334822/how-do-i-ask-and-answer-homework-questions)./338845 # 338845) 질문에 따라 수정하십시오. –

답변

2

대단히 감사합니다.

당신의 생각에 잘못된 점은 "어떤 코드"를 작성하고 "변경"하여 올바르게 만들 수 있다고 생각하는 것입니다. 그건 좋은 프로그램이 아닙니다.

더 나은/올바른 방법에 있습니다 : 당신이 설계를 시작하기 전에

  1. 당신은 문제로 실행, 읽기, 당신이 그것을 코딩을 시작하기 전에
  2. 이 알고리즘을 이해하고, 요구 사항을 이해 당신이 작성한 코드와 실제로 그것을 이해하려고합니다. 그런 다음이를 달성하려는 것과 비교하십시오. 즉 로 작성했습니다.

그리고 물건을 버리고 다시 시작을 두려워하지 않습니다.


구체적인 힌트 :

  1. 당신은 List<HNode>부터 시작해야 하는가? 실제로는 List<Symbol>일까요?
  2. 당신은 트리 구조로 노드를 넣어 왼쪽/오른쪽 필드를 설정해야하지?
  3. 목록이 정렬되어 있는지 알고 계십니까?