#include <iostream>
#include <string>
using namespace std;
string str1 = "ABDH#K###E##CFI###G#J##";
int index = 0;
template<class T>
class ThreadLinkNode
{
public:
T data;
ThreadLinkNode<T> *lchild, *rchild;
ThreadLinkNode();
ThreadLinkNode(T e);
};
template<class T>
ThreadLinkNode<T>::ThreadLinkNode(T e)
{
data = e;
lchild = NULL;
rchild = NULL;
}
template<class T>
ThreadLinkNode<T>::ThreadLinkNode()
{
lchild = NULL;
rchild = NULL;
}
//
template<class T>
class ThreadLinkTree
{
private:
ThreadLinkNode<T> *root;
ThreadLinkNode<T>* CreatePreOrderLinkTree();
void MidOrderLinkTree(ThreadLinkNode<T> *r);
public:
ThreadLinkTree();
void MidOrderLinkTreeTest();
};
template<class T>
void ThreadLinkTree<T>::MidOrderLinkTreeTest()
{
MidOrderLinkTree(root);
cout << endl;
}
template<class T>
void ThreadLinkTree<T>::MidOrderLinkTree(ThreadLinkNode<T> *r)
{
if(r == NULL)
return;
MidOrderLinkTree(r->lchild);
cout << r->data << " ";
MidOrderLinkTree(r->rchild);
}
template<class T>
ThreadLinkNode<T>* ThreadLinkTree<T>::CreatePreOrderLinkTree()
{
ThreadLinkNode<T> *p = NULL;
T ch;
ch = str1[index++];
if(ch == '#')
return p;
else
{
p = new ThreadLinkNode<T>;
p->data = ch;
p->lchild = CreatePreOrderLinkTree();
p->rchild = CreatePreOrderLinkTree();
}
return p; //此处返回p的原因为保证右子树完整,以字符串中的H值为例,当值K的右孩子判断完毕后
} //如果不返回p则将使得H右孩子无值。
template<class T>
ThreadLinkTree<T>::ThreadLinkTree()
{
root = CreatePreOrderLinkTree(); //用构造函数先序创建二叉树。
}
void test03()
{
ThreadLinkTree<char> tree;
cout << "中序遍历为:" << endl;
tree.MidOrderLinkTreeTest();
}
int main()
{
test03();
system("pause");
return 0;
}
前序创建二叉树c++2
最新推荐文章于 2022-06-06 19:14:26 发布