链式二叉树具体程序演示

Posted sunbr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链式二叉树具体程序演示相关的知识,希望对你有一定的参考价值。

  1 #include<stdio.h>
  2 #include<malloc.h>
  3 
  4 struct BTNode
  5     char data;//数据域
  6     struct BTNode * pLchild;//p是指针,L是左,child是孩子;即为左子树指针
  7     struct BTNode * pRchild//右子树指针
  8 
  9 //函数声明
 10 struct BTNode * CreateBTree();//生成根节点地址和二叉树
 11 PreTraverseBTree();//先序遍历
 12 InTraverseBTree();//中序遍历
 13 PostTraverseBTree();//后序遍历
 14 
 15 int main()
 16    struct BTNode * pT = CreateBTree();//获取根节点地址
 17    
 18    PreTraverseBTree(pT);//先序遍历
 19    InTraverseBTree(pT);//中序遍历
 20    PostTraverseBTree(pT);//后序遍历
 21     
 22     return 0;
 23 
 24 
 25 struct BTNode * CreateBTree()
 26     //静态声明结点,动态分配内存
 27     struct BTNode pA = (struct BTNode *)malloc(sizeof(struct BTNode));
 28     struct BTNode pB = (struct BTNode *)malloc(sizeof(struct BTNode));
 29     struct BTNode pC = (struct BTNode *)malloc(sizeof(struct BTNode));
 30     struct BTNode pD = (struct BTNode *)malloc(sizeof(struct BTNode));
 31     struct BTNode pE = (struct BTNode *)malloc(sizeof(struct BTNode));
 32     
 33     //各个结点数据域存值
 34     pA->data = A;
 35     pB->data = B;
 36     pC->data = C;
 37     pD->data = D;
 38     pE->data = E;
 39     
 40     //每个结点的左右指针域都要指向一个地址,注:为空就写NULL
 41     pA->pLchild = pB;//根节点A的左指针域指向B结点的地址
 42     pA->pRchild = pC;//根节点A的右指针域指向C结点的地址
 43     pB->pLchild =  pB->pRchild = NULL;//结点B的左右指针域都为空 
 44     pC->pLchild = pD;//节点C的左指针域指向D结点的地址
 45     pC->pRchild = NULL;//结点C的右指针域为空
 46     pD->pLchild = NULL;//结点D的左指针域为空
 47     pD->pRchild = pE;//结点D的右指针域指向E结点的地址
 48     pE->pLchild =  pE->pRchild = NULL;//结点E的左右指针域都为空 
 49     
 50     return pA;//返回根节点A的地址
 51 
 52 
 53 //先序遍历
 54 PreTraverseBTree(struct BTNode * pT)
 55     //每次递归加判断,若先遍历左子树全部为空就结束递归,才能遍历右子树
 56     if(pT!=NULL)
 57         
 58      printf("%c\\n",pT->data);//先访问根节点
 59      
 60      if(pT->pLchild!=NULL)
 61          PreTraverseBTree(pT->pLchild);//pT->pLchild可以代表整个左子树
 62      //再访问左子树
 63      
 64      if((pT->pRchild!=NULL)
 65          PreTraverseBTree(pT->pRchild);//pT->pRchild可以代表整个右子树
 66      //最后访问右子树
 67      
 68 
 69 
 70 //中序遍历
 71 InTraverseBTree(struct BTNode * pT)
 72     if(pT!=NULL)
 73         
 74      if(pT->pLchild!=NULL)
 75          PreTraverseBTree(pT->pLchild);//pT->pLchild可以代表整个左子树
 76      //先访问左子树
 77      
 78       printf("%c\\n",pT->data);//再访问根节点
 79       
 80      if((pT->pRchild!=NULL)
 81          PreTraverseBTree(pT->pRchild);//pT->pRchild可以代表整个右子树
 82      //最后访问右子树
 83      
 84 
 85 
 86 //后序遍历
 87 PostTraverseBTree(struct BTNode * pT)
 88    if(pT!=NULL)
 89 
 90      if(pT->pLchild!=NULL)
 91          PreTraverseBTree(pT->pLchild);//pT->pLchild可以代表整个左子树
 92      //先访问左子树
 93      
 94      if((pT->pRchild!=NULL)
 95          PreTraverseBTree(pT->pRchild);//pT->pRchild可以代表整个右子树
 96      //再访问右子树
 97      
 98      printf("%c\\n",pT->data);//最后访问根节点
 99       
100 

技术图片

 

以上是关于链式二叉树具体程序演示的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点#算法给小码农链式二叉树-----一根草可斩星辰

二叉树链式结构

二叉树链式存储和遍历

链式二叉树的基本操作(建议收藏!!!)

数据结构(13)---二叉树之链式结构(前序遍历, 中序遍历, 后序遍历, 层序遍历)

顺序存储构建的二叉树转换成链式存储二叉树