永发信息网

树所对应的二叉树其根结点的左子树还是右子树为空?

答案:2  悬赏:50  手机版
解决时间 2021-12-31 18:04
  • 提问者网友:火车头
  • 2021-12-30 20:02
树所对应的二叉树其根结点的左子树还是右子树为空?
最佳答案
  • 五星知识达人网友:三千妖杀
  • 2021-12-30 20:17
你是不是没转对哦,,一般转出来都是右子树为空而左子树为空 步骤为: 加线:在兄弟之间加一连线 抹线:对每个结点,除了其左孩子外,去除其与其余孩子之间的关系 旋转:以树的根结点为轴心,将整树顺时针转45°
全部回答
  • 1楼网友:舊物识亽
  • 2021-12-30 21:12
typedef enum pointertag{link,thread};//link==0:指针; thread==1:线索 typedef struct ctnode{ int data; struct ctnode *firstchild; struct ctnode *nextsibling; pointertag ltag,rtag; }ctnode,*ctree; ctree pre=null; void inthreading(ctree p) { if(p) { inthreading(p->firstchild);// 左子树线索化 if(!p->firstchild ) { p->ltag =thread; p->firstchild =pre; } if(!pre->nextsibling ) { pre->rtag =thread; pre->nextsibling =p; } pre=p;//保持pre指向p inthreading(p->nextsibling );//右子树线索化 } } ctree inorderthreading(ctree thrt,ctree ct) {//中序遍历二叉树ct,并将其中序线索化,thrt指向头结点 thrt=(ctree)malloc(sizeof(ctnode)); if(!thrt)exit(0); thrt->ltag =link;//建立头结点 thrt->rtag =thread; thrt->nextsibling =thrt;//右指针回指 if(!ct) thrt->firstchild =thrt; else { thrt->firstchild =ct; pre=thrt; inthreading(ct);//中序遍历进行中序遍历线索化 pre->nextsibling =thrt;//最后一个结点线索化 pre->rtag =thread; (thrt)->nextsibling =pre; } return thrt; } int print(int e) {//输出结点 printf("%3d",e);return 1; } int inordertraverse(ctree ct,int(*visit)(int e)) {//ct指向头结点,头结点的做指针firstchild指向根结点,中序遍历二叉树 ctree p; p=ct->firstchild ;//p指向根结点 while(p!=ct)//空树或遍历结束时,p==ct { while(p->ltag ==link)p=p->firstchild ; if(!visit(p->data )) return 0; //打印 while(p->rtag ==thread&&p->nextsibling !=ct) { p=p->nextsibling ;visit(p->data); //访问后继结点 } p=p->nextsibling ; } return 1; }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯