2015-01-28 13 views
0

C++의 클래스에서 이진 트리를 만들었습니다. 내 삽입 기능은 비 반복적이며, 다음과 같습니다 : 나는 통과하고이 기능을 후 주문 통과를 사용하여 트리를 인쇄트리 순회 올바른 순서로 인쇄되지 않습니다.

bool Tree1::inOrderInsert(int x) 
{ 
    TreeNode *parent = NULL; 
    TreeNode *temp = root; 
    TreeNode *newNode = new TreeNode(x); 

    if (root == NULL) 
    { 
     root = newNode; 
     //cout << "Root empty!" << endl; 
     return true; 
    } 

    while (temp != NULL) 
    { 
     if (x <= temp->value) 
     { 
      parent = temp; 
      temp = temp->left; 
     } 
     else 
     { 
      parent = temp; 
      temp = temp->right; 
     } 
    } 

    if (x <= parent->value) 
    { 
     parent->left = newNode; 
     return true; 
    } 
    else 
    { 
     parent->right = newNode; 
     return true; 
    } 
} 

:이 같은 주에 삽입하고 값을 인쇄

void Tree1::postOrderPrintRec(TreeNode *node) 
{ 
    if (node != NULL) 
    { 
     preOrderPrintRec(node->left); 
     preOrderPrintRec(node->right); 
     cout << "Value: " << node->value << endl; 
    } 
} 

: 다음과 같이 내가 코드를 실행할 때 내가보고해야

tree1.inOrderInsert(5); 
tree1.inOrderInsert(3); 
tree1.inOrderInsert(2); 
tree1.inOrderInsert(4); 
tree1.inOrderInsert(6); 
tree1.inOrderInsert(7); 
tree1.postOrderPrintRec(tree1.getRoot()); 

값은 다음과 같습니다 값 : 2 값 : 4 값 : 3 값 : 7 값 : 6 값 : 값 : 그러나 5

, I는이 메시지가 표시되는 3 값 : 2 값 : 4 값 : 6 값 : 7 값 : 5

잘못된 순서로 값이 왜 인쇄되고 있는지 누가 알 수 있습니까?

+0

문제의 preOrderPrintRec() 함수를 추가하십시오. – Steephen

답변

1

귀하의 postOrderPrintRec() 기능 내에 preOrderPrintRec() 전화가 있습니다. 즉, 트리의 최상위 레벨에서 포스트 순회 트래 버설을 수행하는 것입니다. 대신 postOrderPrintRec()으로 전화하면 문제가 해결 될 것이라고 생각합니다.

+0

LOL. 오 .. 내 .. 얼마나 짜증나. 고맙습니다. 나는이 질문을 삭제해야합니까 아니면 ....? – James4701