#include
#include
using namespace std;
string str1 = "ABDH#K###E##CFI###G#J##";
int index = 0;
template
class ThreadlinkNode
{
public:
T data;
ThreadlinkNode *lchild, *rchild;
ThreadlinkNode();
ThreadlinkNode(T e);
};
template
ThreadlinkNode::ThreadlinkNode(T e)
{
data = e;
lchild = NULL;
rchild = NULL;
}
template
ThreadlinkNode::ThreadlinkNode()
{
lchild = NULL;
rchild = NULL;
}
//
template
class ThreadlinkTree
{
private:
ThreadlinkNode *root;
ThreadlinkNode* CreatePreOrderlinkTree();
void MidOrderlinkTree(ThreadlinkNode *r);
public:
ThreadlinkTree();
void MidOrderlinkTreeTest();
};
template
void ThreadlinkTree::MidOrderlinkTreeTest()
{
MidOrderlinkTree(root);
cout << endl;
}
template
void ThreadlinkTree::MidOrderlinkTree(ThreadlinkNode *r)
{
if(r == NULL)
return;
MidOrderlinkTree(r->lchild);
cout << r->data << " ";
MidOrderlinkTree(r->rchild);
}
template
ThreadlinkNode* ThreadlinkTree::CreatePreOrderlinkTree()
{
ThreadlinkNode *p = NULL;
T ch;
ch = str1[index++];
if(ch == '#')
return p;
else
{
p = new ThreadlinkNode;
p->data = ch;
p->lchild = CreatePreOrderlinkTree();
p->rchild = CreatePreOrderlinkTree();
}
return p; //此处返回p的原因为保证右子树完整,以字符串中的H值为例,当值K的右孩子判断完毕后
} //如果不返回p则将使得H右孩子无值。
template
ThreadlinkTree::ThreadlinkTree()
{
root = CreatePreOrderlinkTree(); //用构造函数先序创建二叉树。
}
void test03()
{
ThreadlinkTree tree;
cout << "中序遍历为:" << endl;
tree.MidOrderlinkTreeTest();
}
int main()
{
test03();
system("pause");
return 0;
}