c语言1.先序遍历创建二叉树; 2.中序线索化二叉树; 3.分别通过 找前驱 和 找后继 的方式,遍历中序线索二叉树。
时间: 2024-01-23 22:05:54 浏览: 65
好的,我可以帮你解答这些问题。
1. 先序遍历创建二叉树的算法:
```
typedef struct BiTNode{
char data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
BiTree CreateBiTree(){
char ch;
scanf("%c", &ch);
if(ch == '#'){
return NULL;
}
BiTree root = (BiTree)malloc(sizeof(BiTNode));
root->data = ch;
root->lchild = CreateBiTree();
root->rchild = CreateBiTree();
return root;
}
```
2. 中序线索化二叉树的算法:
```
typedef struct ThreadNode{
char data;
struct ThreadNode *lchild, *rchild;
int ltag, rtag;
}ThreadNode, *ThreadTree;
ThreadNode* pre = NULL;
void InThread(ThreadTree p){
if(p){
InThread(p->lchild);
if(!p->lchild){
p->lchild = pre;
p->ltag = 1;
}
if(pre && !pre->rchild){
pre->rchild = p;
pre->rtag = 1;
}
pre = p;
InThread(p->rchild);
}
}
void CreateInThread(ThreadTree root){
pre = NULL;
if(root){
InThread(root);
if(!pre->rchild){
pre->rchild = NULL;
pre->rtag = 1;
}
}
}
```
3. 找前驱和找后继的算法:
```
ThreadNode* FirstNode(ThreadNode* p){
while(p->ltag == 0){
p = p->lchild;
}
return p;
}
ThreadNode* NextNode(ThreadNode* p){
if(p->rtag == 0){
return FirstNode(p->rchild);
}
else{
return p->rchild;
}
}
void InOrder(ThreadTree T){
ThreadNode* p = FirstNode(T);
while(p){
printf("%c ", p->data);
p = NextNode(p);
}
}
```
希望这些代码可以帮到你,如果还有其他问题,可以继续提问哦。
阅读全文