Analysis:
1. The middle sequence traversal of the two-tree is just the way of the orderly traversal, so it can be processed by the method of the middle order recursion;
2. You can "output" the node to the end of the list in a way similar to the output stream;
3. Local variables can be used to simplify the judgment and optimize the program.
Program:
typedef struct TAGTREENODE_S
{
int nvalue;
Tagtreenode_s* Pleftnode;
Tagtreenode_s* Prightnode;
} treenode_s;
void Appendnode (treenode_s* pnode, treenode_s*& ptailnode)
{
if (Pnode = = NULL)
Return
Ptailnode->prightnode = Pnode;
Pnode->pleftnode = Ptailnode;
Ptailnode = Pnode;
}
void Appendtree (treenode_s* prootnode, treenode_s*& ptailnode)
{
if (Prootnode = = NULL)
Return
Appendtree (Prootnode->pleftnode, Ptailnode);
Appendnode (Prootnode, Ptailnode);
Appendtree (Prootnode->prightnode, Ptailnode);
}
treenode_s* Tolink (treenode_s* prootnode)
{
Treenode_s Headnode;
treenode_s* Ptailnode = &HeadNode;
Ptailnode->prightnode = NULL;
Appendtree (Prootnode, Ptailnode);
Ptailnode->prightnode = NULL;
Ptailnode = headnode->prightnode;
if (ptailnode! = NULL)
Ptailnode->pleftnode = NULL;
return ptailnode;
}
This article is from the "Fool" blog, please be sure to keep this source http://roboter.blog.51cto.com/10249123/1653008
Convert a two-fork search tree into a sorted doubly linked list