鱼C论坛

 找回密码
 立即注册
查看: 1263|回复: 1

线索二叉树,求助大佬

[复制链接]
发表于 2021-12-8 23:07:46 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#include<stdlib.h>

typedef enum {Link,Thread} point;

typedef struct Treenode {
point LFlag, RFlag;
int data;
struct Treenode* lchild, * rchild;
}node,*Tree;

void BuildTree(Tree* L)
{
*L = NULL;
return;
}

void CreateTree(Tree* L)
{
char c;
scanf_s("%c", &c);
if (c == ' ') {
*L = NULL;
}
else {
*L = (Tree)malloc(sizeof(Treenode));
(*L)->data = c;
(*L)->LFlag = Link;
(*L)->RFlag = Link;
CreateTree(&(*L)->lchild);
CreateTree(&(*L)->rchild);

}
}

Tree pre;

void OrderThreading(Tree* L)
{
if (L)
{
if (!(*L)->lchild) {
(*L)->LFlag = Thread;
(*L)->lchild = pre;
}
if (!(*L)->rchild) {
(*L)->RFlag = Thread;
(*L)->rchild = (*L);
}
pre= (*L);
OrderThreading(&((*L)->lchild));
OrderThreading(&((*L)->rchild));
}
}

void OrderTree(Tree L)
{
if (L) {
printf("%c", L->data);
L = L->lchild;
if (L->LFlag == Link) {
L = L->lchild;
}
if (L->RFlag == Thread && L->rchild != L) {
L = L->rchild;
printf("%c", L->data);
}
L = L->rchild;
}
}

int main()
{
Tree tree ;
BuildTree(&tree);
CreateTree(&tree);
OrderThreading(&tree);
OrderTree(tree);
}  

运行不了啊,那个OrderThreading函数的参数L,好像传不进去,还是怎么回事,求大佬帮忙(vs2019)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-12-13 10:25:16 | 显示全部楼层
  1. void CreateTree(Tree* L)
  2. {
  3.         char c;
  4.         scanf_s("%c", &c);
  5.         fflush(stdin);/////////////
  6.         if (c == ' ') {
  7.                 *L = NULL;
  8.         }
  9.         else {
  10.                 *L = (Tree)malloc(sizeof(Treenode));
  11.                 (*L)->data = c;
  12.                 (*L)->LFlag = Link;
  13.                 (*L)->RFlag = Link;
  14.                 CreateTree(&(*L)->lchild);
  15.                 CreateTree(&(*L)->rchild);

  16.         }
  17. }

  18. Tree pre;

  19. void OrderThreading(Tree* L)//不知道这个函数干啥的,怎么弄成了死循环
  20. {
  21.         if (L)
  22.         {
  23.                 if (!(*L)->lchild) {//假如(*L)->lchild为空(*L)->lchild = pre;
  24.                         (*L)->LFlag = Thread;
  25.                         (*L)->lchild = pre;
  26.                 }
  27.                 if (!(*L)->rchild) {//假如(*L)->rchild为空,(*L)->rchild = (*L);
  28.                         (*L)->RFlag = Thread;
  29.                         (*L)->rchild = (*L);
  30.                 }
  31.                 pre= (*L);
  32.                 OrderThreading(&((*L)->lchild));//最后递归死循环,因为参数L永远不为空
  33.                 OrderThreading(&((*L)->rchild));
  34.         }
  35. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-25 06:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表