struct node
{
struct node *left, *right;
int data;
};
void LeafLinked(struct node *t, struct node **prevLeaf, struct node **head)
{
if(t)
{
if(t->left == NULL && t->right == NULL)
{ //leaf
if(*head == NULL)
*head = t;
else if(*prevLeaf)
(*prevLeaf)->next = t;
*prevLeaf = t;
}
else { //at least one child
LeafLinked(t->left, prevLeaf, head);
LeafLinked(t->right, prevLeaf, head);
}
}
}
/*Utilities*/
struct node* newNode(int data)
{
struct node* node = (struct node*)
malloc(sizeof(struct node));
node->data = data;
node->left = NULL;
node->right = NULL;
return(node);
}
inline void printList(struct node *t)
{
while(t)
{
printf("%d ", t->data);
t = t->next;
}
printf("\n");
}
int main()
{
/*level 0*/
struct node *t = newNode(10);
/*level 1*/
t->left = newNode(20);
t->right = newNode(30);
/*level 2*/
t->left->left = newNode(40);
t->left->right = newNode(70);
t->right->left = newNode(50);
t->right->right = newNode(60);
/*level 3*/
t->left->left->left = newNode(70);
t->right->right->left = newNode(60);
t->right->right->right = newNode(160);
/*Empty List head*/
struct node *head = NULL, *prevLeaf = NULL;
/*Convert tree to list*/
LeafLinked(t, &prevLeaf, &head);
/*print list*/
printList(head);
return 0;
}
Rune Here https://ideone.com/UOakN
No comments :
Post a Comment