当前位置:   article > 正文

数据结构15——建立二叉树的二叉链表存储结构(严6.70)_怎么建立二叉树的二叉链表存储结构

怎么建立二叉树的二叉链表存储结构

Description

如果用大写字母标识二叉树结点,则一颗二叉树可以用符合下面语法图的字符序列表示。试编写递归程序,由这种形式的字符序列,建立相应的二叉树的二叉链表存储结构(附图见《严蔚敏:数据结构题集(C语言版)》第45页6.70)。

Input

输入如图所示的字符序列。

Output

建立相应二叉树的二成叉链表存储结构,并先序遍历输出。

  • Sample Input 
    A(B(#,D),C(E(#,F),#))
  • Sample Output
    AB#DCE#F#

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. typedef struct BTNode{
  4. char data;
  5. struct BTNode *lchild;
  6. struct BTNode *rchild;
  7. }BTNode;
  8. BTNode *CreateTree(){
  9. char s1, s2;
  10. BTNode *q;
  11. q = (BTNode*)malloc(sizeof(BTNode));
  12. q->lchild = NULL;
  13. q->rchild = NULL;
  14. s1 = getchar();
  15. s2 = getchar();
  16. if(s1 == ','){
  17. q->data = s2;
  18. s1 = getchar();
  19. if(s1 == '('){
  20. q->lchild = CreateTree();
  21. q->rchild = CreateTree();
  22. }
  23. }
  24. else{
  25. q->data = s1;
  26. if(s2 == '('){
  27. q->lchild = CreateTree();
  28. q->rchild = CreateTree();
  29. }
  30. }
  31. return q;
  32. }
  33. void PrintfTree(BTNode *q){
  34. printf("%c",q->data);
  35. if(q->lchild)
  36. PrintfTree(q->lchild);
  37. if(q->rchild)
  38. PrintfTree(q->rchild);
  39. }
  40. int main(){
  41. BTNode *q = (BTNode*)malloc(sizeof(BTNode));
  42. q = CreateTree();
  43. PrintfTree(q);
  44. return 0;
  45. }

题解:将数据存储为酱紫~


读取两个字符,若第一次字符为逗号,将第二个字符存在节点,再读取一个字符,若为左括号,递归依次找左右节点;若第一个字符不是逗号,将第一个字符存在节点,依次找左右节点。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/232963
推荐阅读
相关标签
  

闽ICP备14008679号