다음은 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;
}
이 숙제가 느슨한 NULL.And로 데이터 = 1, 오른쪽 서브 트리를 verride와 노드의
func
에? –아니오 그것의 숙제가 ... 나는 웹 사이트 중 하나에서이 질문을 발견했다. 그리고 실수를 지적 해 주셔서 감사합니다. 문제가 해결되었습니다. :) – deepshikha
그럼 바퀴를 재발 명하면 안됩니다. . STL에서 이미 사용 가능한 컨테이너를 사용하십시오. 예를 들어'std :: map'에서'std :: list'로 복사하는 것은 매우 간단합니다. –