二叉树线索化问题

来源:互联网 发布:c语言预处理程序 编辑:程序博客网 时间:2024/05/17 04:27

在某人的帮助下,终于理清了二叉树线索后问题。

#include<iostream>
#include<vector>
using namespace std;
typedef struct node
{
int data;
int ltag;
int rtag;
    struct node *lchild;
struct node *rchild;
}*bitree,binode;
bitree initree(binode *root)//创建树
{   
bitree tree=root;
return tree;
}
binode *makenode(int item,binode *lchild,binode *rchild)
{
binode *pnode;
pnode=(binode *)malloc(sizeof(binode));
if(pnode)
{
pnode->data=item;
pnode->lchild=lchild;
pnode->ltag=0;
pnode->rchild=rchild;
pnode->rtag=0;
}
return pnode;
}
void midorder(bitree tree)
{
binode *pnode;
pnode=tree->lchild;
while(pnode!=tree)
{   
while(pnode->ltag==0)
        pnode=pnode->lchild;
cout<<pnode->data<<"->";
while(pnode->rtag==1&&pnode->rchild!=tree)
{
pnode=pnode->rchild;
cout<<pnode->data<<"->";
}
pnode=pnode->rchild;
}
}
bitree pre;
void bianli(bitree p)
{
if(p)
{
bianli(p->lchild);
if(p->lchild==NULL)
{
   p->ltag=1;
p->lchild=pre;
}
if(p->rchild==NULL)
p->rtag=1;
if(pre->rtag==1)
   pre->rchild=p;
pre=p;
bianli(p->rchild);
}

}
bitree InOrderThreading(bitree tree)
{
binode *head;
head=(binode *)malloc(sizeof(binode));
head->ltag=0;
head->rtag=1;
head->data=100;
head->lchild=tree;
pre=head;
bianli(head->lchild);
pre->rchild=head;
pre->rtag=1;
head->rchild=pre;
return head;
}
int main()
{   
    binode * n1 = makenode(2,NULL,NULL);  
    binode * n2 = makenode(1,NULL,n1);  
    binode * n3 = makenode(5,NULL,NULL);  
    binode * n4 = makenode(7,NULL,NULL);  
    binode * n5 = makenode(3,n2,NULL);  
    binode * n6 = makenode(6,n3,n4);  
    binode * n7 = makenode(4,n5,n6); 
    bitree tree=initree(n7);
tree=InOrderThreading(tree);
    midorder(tree);
return 0;
}

0 0
原创粉丝点击