用c语言实现线索二叉树的遍历
时间: 2023-10-25 17:10:29 浏览: 132
好的,我可以回答这个问题。线索二叉树遍历分为前序遍历、中序遍历和后序遍历三种。其中,中序遍历是线索二叉树最常用的遍历方法。
实现中序遍历线索二叉树的步骤如下:
1. 首先,需要定义线索二叉树节点的数据结构,包括左子树指针、右子树指针、左子树线索、右子树线索和节点值等信息。
typedef struct ThreadedNode{
char data;
struct ThreadedNode *left,*right;
int ltag,rtag;
}ThreadedNode,*ThreadedTree;
2. 然后,利用前序遍历构建线索二叉树。
void CreateThreadedTree(ThreadedTree &T){
char c;
scanf("%c",&c);
if(c == '#') T = NULL;
else{
T = (ThreadedNode*)malloc(sizeof(ThreadedNode));
T -> data = c;
T -> ltag = T -> rtag = 0;
CreateThreadedTree(T -> left);
CreateThreadedTree(T -> right);
}
}
3. 接下来,对于中序遍历线索二叉树,需要先中序遍历构建左子树线索。
void InThread(ThreadedNode *p,ThreadedNode *&pre){
if(p!=NULL){
InThread(p->left,pre);
if(p->left == NULL){
p->ltag = 1;
p->left = pre;
}
if(pre!=NULL && pre->right == NULL){
pre->rtag = 1;
pre->right = p;
}
pre = p;
InThread(p->right,pre);
}
}
4. 最后,中序遍历线索化整棵树,完成线索二叉树的转换。
void InOrder(ThreadedNode *T){
ThreadedNode *p=T;
while(p->ltag == 0) p = p->left;
while(p!=NULL){
printf("%c",p->data);
if(p->rtag)
p=p->right;
else
p=p->right;
while(p!=NULL && p -> ltag == 0) p = p -> left;
}
}
以上就是用C语言实现线索二叉树的中序遍历代码。
阅读全文