2012-08-17 1 views
0

다음은 BST를 정렬 된 두 배로 연결된 목록으로 변환하기 위해 구현 한 코드입니다. 그러나 다음 입력에 대해 가장 오른쪽 맨 나중에 하위가 누락되었습니다.BST를 두 배로 연결된 정렬 된 목록으로 변환

예를 들어, 입력 4 1 2 3 6 5 7 (BST 입력)

데이터 2 및 3. 노드가 누락되었습니다. 코드에 무엇이 문제가 있습니까?

#include<iostream> 
using namespace std; 
struct node 
{ 
int data; 
node* left; 
node* right; 
}; 
node* tree=NULL; 
int count=1; 
void inorder(node *tree) 
{ 
if(tree!=NULL) 
{ 
    inorder(tree->left); 
    cout<<tree->data<<" "; 
    inorder(tree->right); 
} 
} 
node * insert(node *tree,int n) 
{ 
if(tree==NULL) 
{ 
    tree=new node; 
    tree->left=tree->right=NULL; 
    tree->data=n; 
} 
else if(tree->data>n) 
tree->left=insert(tree->left,n); 
else 
tree->right=insert(tree->right,n); 
return(tree); 

} 
node *start=NULL; 
node *prev=NULL; 
node * head=NULL; 
void func(node *root) 
{ 
if(root!=NULL) 
{ 
    func(root->left); 
    if(start==NULL) 
    { 
     start=root; 
     start->left=NULL; 
     start->right=NULL; 
     prev=start; 
     head=start; 
     //cout<<start->data<<" "; 
    } 
    else 
    { 
     start->right=root; 
     start=start->right; 
     start->left=prev; 
     prev=start; 
     // cout<<start->left->data<<" "; 
    } 
    func(root->right); 
} 
} 
int main() 
{ 
int n; 

cout<<"Enter the number of nodes\n"; 
cin>>n; 
int k=n; 
int value; 
while(n--) 
{ 
    cin>>value; 
    tree=insert(tree,value); 
} 
inorder(tree); 
cout<<endl; 
func(tree); 
cout<<endl; 
while(head!=NULL) 
{ 
    cout<<head->data<<" "; 
    head=head->right; 
} 
return 0; 
} 
+0

이 숙제가 느슨한 NULL.And로 데이터 = 1, 오른쪽 서브 트리를 verride와 노드의 func 에? –

+0

아니오 그것의 숙제가 ... 나는 웹 사이트 중 하나에서이 질문을 발견했다. 그리고 실수를 지적 해 주셔서 감사합니다. 문제가 해결되었습니다. :) – deepshikha

+0

그럼 바퀴를 재발 명하면 안됩니다. . STL에서 이미 사용 가능한 컨테이너를 사용하십시오. 예를 들어'std :: map'에서'std :: list'로 복사하는 것은 매우 간단합니다. –

답변

2

func에서 원본 트리를 수정하고 있습니다. 예를 들어, func에 대한 첫 번째 호출의 경우 start->right = NULLfunc(root->right);은 거의 의미가 없습니다. start = root (및 이와 유사한 것)을 수행하는 대신 new을 사용하여 메모리를 할당하고 노드를 목록에 복사 할 수 있습니다.

+1

실수를 지적 해 주셔서 감사합니다. :) – deepshikha

관련 문제