函数接口定义:

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

图片2.png


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;
	}
}

更多推荐