前序创建二叉树c++2

前序创建二叉树c++2,第1张

前序创建二叉树c++2
#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;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5610949.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存