2017-03-29 2 views
1

형제는 같은 부모를 가진 노드입니다. 바이너리 트리에서는 최대 하나의 형제가있을 수 있습니다. 루트는 형제가 될 수 없으므로 루트를 인쇄해서는 안됩니다.형제가없는 이진 트리의 모든 노드를 인쇄 하시겠습니까?

필자는 지금까지 사용해 왔던 모든 테스트 케이스에서 잘 작동하는 코드를 작성했지만 온라인 심사 위원에게 제출하려고했을 때 대부분의 경우에 잘못되었습니다. 내가 무엇인지 알아 내기 위해 최선을 다했지만 버그가 될 수있는 것이 무엇인지 파악할 수 없습니다. 또한 해당 테스트 케이스에 대한 액세스 권한이 없기 때문에 실행할 수 없습니다.

public static void printNodesWithoutSibling(BinaryTreeNode<Integer> root) { 

     if(root==null) 
     return; 


     printNodesWithoutSibling(root.left); 
     printNodesWithoutSibling(root.right); 

     if(root.right==null && root.left!=null) 
     { 
      System.out.print(root.left.data+" "); 
      return; 
     } 



     else if(root.left==null && root.right!=null) 
     { 

      System.out.print(root.right.data+" "); 
      return; 
     } 
} 
+0

적어도 하나 개의 샘플 예상 출력이 거기에 당신의 교수 나 TA –

+0

에 대한 좋은 질문처럼 소리 자바 리팩토링에 대한 문제가없는 것이라고 생각합니까? 코드는 항상 공백을 추가합니다. 마지막 노드에서도 받아 들일 수 있습니까? –

+0

예 해당 테스트 사례 중 4 개가 정상적으로 실행되었지만 나머지 5 개는 실행되지 않았습니다 –

답변

0

귀하의 코드에는 올바른 형제가없는 왼쪽 자녀의 경우를 고려하지 않습니다.

노드에 형제가 있는지 확인하는 데 필요한 지식이 상위에 있습니다.

다음 코드 단편은 형제가없는 노드를 선주문으로 인쇄합니다. 당신은 쉽게 수정할 수 있습니다 inorder 또는 postorder. 이 코드는 C의 ++로 작성,하지만 난 당신이

void print_nodes_without_sibling(Node * root, bool no_sibling = false) 
{ 
    if (root == nullptr) 
    return; 

    if (no_sibling) 
    cout << root->key << endl; 

    print_nodes_without_sibling(root->left, 
           root->left != nullptr and root->right != nullptr); 
    print_nodes_without_sibling(root->right, 
           root->left != nullptr and root->right != nullptr); 
}