#include<iostream>
using namespace std;
class Node
{
public:
int lflag;//左标志
int rflag;//右标志
};
class Tree
{
public:
Tree(char c):m_root(NULL),m_flag(c){}
Node *create(char *&str)//创建一颗二叉树
{
if(*str == m_flag)
return NULL;
else
{
Node *p = new Node(*str);
p->m_left = create(++str);
p->m_right = create(++str);
return p;
}
}
void PreOrder(Node *root)//对二叉树进行前序遍历
{
if(root != NULL)
{
cout<<root->m_value<<" ";
PreOrder(root->m_left);
PreOrder(root->m_right);
}
}
void InThread(Node *&root,Node *&pre)//中序线索化
{
if(root == NULL)
return;
InThread(root->m_left,pre);
if(root->m_left == NULL)
{
root->lflag = 1;
root->m_left = pre;
}
if(pre != NULL && pre->m_right == NULL)
{
pre->rflag = 1;
pre->m_right = root;
}
pre = root;
InThread(root->m_right,pre);
}
void PreThreadOrder(Node *root)//前序线索化
{
Node *p = root;
while(p)
{
cout<<p->m_value<<" ";
if(p->lflag == 0) //有左子树
p = p->m_left;
else if(p->rflag == 0)//有右子树
p = p->m_right;
else //没有左子树和右子树,找后继
{
while(p != NULL && p->rflag == 1)
p = p->m_right;
if(p != NULL)
p = p->m_right;
}
}
}
Node *m_root;
char m_flag;
};
数据结构之C++实现线索二叉树(无主函数)
最新推荐文章于 2022-07-10 17:47:11 发布