当前位置:   article > 正文

5.4 交换二叉树中每个结点的左孩子和右孩子_第3关:交换二叉树每个节点的左孩子和右孩子

第3关:交换二叉树每个节点的左孩子和右孩子

 以二叉链表作为二叉树的存储结构,交换二叉树中每个结点的左孩子和右孩子。

输入格式:

输入二叉树的先序序列。

提示:一棵二叉树的先序序列是一个字符串,若字符是‘#’,表示该二叉树是空树,否则该字符是相应结点的数据元素。

输出格式:

输出有两行:

第一行是原二叉树的中序遍历序列;

第二行是交换后的二叉树的中序遍历序列。

输入样例:

ABC##DE#G##F###

输出样例:

CBEGDFA

AFDGEBC

写的时候发现期中算法设计错了,应该换指针而不是换值o(╥﹏╥)o

主要是考虑不周,换值却没有考虑空指针问题,考虑空指针的话就会发现换值会乱成一团了。

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. #define N 105
  5. typedef struct Tree {
  6. char c;
  7. struct Tree *lchild, *rchild;
  8. } tree;
  9. char s[N], ch;
  10. int n;
  11. tree* create() {
  12. tree *p = (tree*)malloc(sizeof(tree));
  13. scanf("%c", &ch);
  14. if(ch != '#') {
  15. p->c = ch;
  16. p->lchild = create();
  17. p->rchild = create();
  18. } else return NULL;
  19. return p;
  20. }
  21. void mid_order(tree *root) {
  22. if(root == NULL) return;
  23. mid_order(root->lchild);
  24. printf("%c", root->c);
  25. mid_order(root->rchild);
  26. }
  27. void swap_l_r(tree *root) {
  28. if(root == NULL) return;
  29. if(root->lchild == NULL && root->rchild == NULL) return;
  30. tree *tmp;
  31. tmp = root->lchild;
  32. root->lchild = root->rchild;
  33. root->rchild = tmp;
  34. swap_l_r(root->lchild);
  35. swap_l_r(root->rchild);
  36. }
  37. int main() {
  38. tree *root = create();
  39. mid_order(root);
  40. puts("");
  41. swap_l_r(root);
  42. mid_order(root);
  43. return 0;
  44. }

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

闽ICP备14008679号