C语言递归实现线索二叉树
发布时间:2020-12-15 03:33:48 所属栏目:C语言 来源:网络整理
导读:本文实例为大家分享了C语言递归实现线索二叉树的具体代码,供大家参考,具体内容如下 描述:将二叉树中结点的空左孩子指针域指向前驱结点,将空的右孩子指针域指向后继结点。 code: #pragma warning(disable:4996)#includestdio.h#includestdlib.htypedef st
本文实例为大家分享了C语言递归实现线索二叉树的具体代码,供大家参考,具体内容如下 描述:将二叉树中结点的空左孩子指针域指向前驱结点,将空的右孩子指针域指向后继结点。 code: #pragma warning(disable:4996) #include<stdio.h> #include<stdlib.h> typedef struct TreeNode { char data; struct TreeNode *lchild,*rchild; int ltag,rtag; }Tree,*BTree; BTree Build_Tree(void) { BTree T; char ch; scanf("%c",&ch); if (ch == '#') { T = NULL; } else { T = (BTree)malloc(sizeof(Tree)); T->data = ch; T->ltag = 0; T->rtag = 0; T->lchild = Build_Tree(); T->rchild = Build_Tree(); } return T; } //先序线索化 void Pre_Thread(BTree cur,BTree *pre) { if (cur && cur->ltag==0) { printf("%c ",cur->data); if (cur->lchild == NULL) { cur->lchild = *pre; (*pre)->ltag = 1; cur->ltag = 1; } if (cur->rchild == NULL) { cur->rtag = 1; } if (*pre && (*pre)->rtag == 1) { (*pre)->rchild = cur; } *pre = cur; Pre_Thread(cur->lchild,pre); Pre_Thread(cur->rchild,pre); } } //中序线索化 void In_Thread(BTree cur,BTree *pre) { if (cur) { In_Thread(cur->lchild,pre); printf("%c ",cur->data); if (cur->lchild==NULL) { cur->lchild = *pre; cur->ltag = 1; } if (cur->rtag == NULL) { cur->rtag = 1; } if (*pre && (*pre)->rtag == 1) { (*pre)->rchild = cur; } *pre = cur; In_Thread(cur->rchild,pre); } } //后序线索化 void Post_Thread(BTree cur,BTree *pre) { if (cur) { Post_Thread(cur->lchild,pre); Post_Thread(cur->rchild,cur->data); if (cur->lchild == NULL) { cur->lchild = *pre; cur->ltag = 1; } if (cur->rchild == NULL) { cur->rtag = 1; } if (*pre && (*pre)->rtag == 1) { (*pre)->rchild = cur; } *pre = cur; } } int main(void) { BTree T,p=NULL; T = Build_Tree(); Pre_Thread(T,&p); //In_Thread(T,&p); //Post_Thread(T,&p); return 0; } 跑时分别运行前序、中序、后序线索化。 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |