Explain the following these two lines of the code which are there inside the two hash symbols

if(root -> left != NULL and root -> right == NULL) {
Linkedlist leftLL = flatten(root -> left)
# leftLL.tail -> right = root; #
l.head = leftLL .head
l.tail = root;

}
and in main() {
Linkedlist l = flatten(root);
node * temp = l.head;
while(temp != NULL) {
cout << temp -> data;
# temp = temp -> right; #
}
}

hello @Sachita3

At any root node leftLL is the linked list formed from the left subtree.
You have to attach the tail of the linked list formed by the left subtree to the root node.
So we do leftLL.tail->right = root;

this line is for jumping to next node whose address we have in our right pointer.