6-1 中序线索化二叉树及遍历
·
函数接口定义:
void InThreading(BiThrTree p);// 以结点P为根的子树中序线索化
void InOrderTraverse_Thr(BiThrTree T);// 中序遍历二叉线索树T的非递归算法,对每个数据元素直接输出
裁判测试程序样例:
#include<iostream>
using namespace std;
typedef struct BiThrNode
{
char data;
struct BiThrNode *lchild,*rchild;
int LTag,RTag;
}BiThrNode,*BiThrTree;
BiThrNode *pre=new BiThrNode;
void CreateBiTree(BiThrTree &T)
{
char ch;
cin >> ch;
if(ch=='#') T=NULL;
else
{
T=new BiThrNode;
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
void InThreading(BiThrTree p);
void InOrderTraverse_Thr(BiThrTree T);
int main()
{
pre->RTag=1;
pre->rchild=NULL;
BiThrTree tree;
CreateBiTree(tree);
InThreading(tree);
InOrderTraverse_Thr(tree);
return 0;
}
/* 请在这里填写答案 */
输入样例:
ABD###CEG###FH##I##
输出样例:
DBAGECHFI

void InThreading(BiThrTree p)
{
if (p)
{
InThreading(p->lchild);
if (!p->lchild) { p->LTag = 1; p->lchild = pre; }
if (!pre->rchild) { pre->RTag = 1; pre->rchild = p; }
pre = p;
InThreading(p->rchild);
}
}
void InOrderTraverse_Thr(BiThrTree T)
{
while (T)
{
while (T->LTag == 0) T = T->lchild;
cout << T->data;
while (T->RTag == 1)
{
T = T->rchild;
cout << T->data;
}
T = T->rchild;
}
}
更多推荐


所有评论(0)