• 求先序遍历序列中第(1<=k<=二叉树中结点个数)个结点的值


    本题本质上就是一个遍历算法的实现,只不过用一个全局变量的来记录访问的序号,求其他遍历序列的第k个结点也采用相似的方法。二叉树的遍历算法可以引申出大量的算法题,因此考生务必熟练掌握二叉树的遍历算法。 

     C语言代码:

    1. //本题本质上就是一个遍历算法的实现,只不过用一个全局变量的
    2. //来记录访问的序号,求其他遍历序列的第k个结点也采用相似的
    3. //方法。二叉树的遍历算法可以引申出大量的算法题,因此考生务必
    4. //熟练掌握二叉树的遍历算法。
    5. #include
    6. using namespace std;
    7. typedef char ElemType;
    8. typedef struct BiNode {
    9. ElemType data;
    10. BiNode* lchild;
    11. BiNode* rchild;
    12. }BiNode, * BiTree;
    13. //构建二叉树
    14. BiNode* Create(BiNode* bt) {
    15. static int i = 0;
    16. char ch;
    17. //string str = "AB#D##C##";
    18. //string str = "124##56##7##3##";
    19. string str = "ABD#G##E##CF###";
    20. //string str = "ABD#GH##I##E##CF###";
    21. //string str = "#";
    22. ch = str[i++];
    23. if (ch == '#')bt = NULL;//建立一棵空树
    24. else {
    25. bt = (BiTree)malloc(sizeof(BiNode)); bt->data = ch;//生成一个结点,数据域为ch
    26. bt->lchild = Create(bt->lchild);//递归建立左子树
    27. bt->rchild = Create(bt->rchild);//递归建立右子树
    28. }
    29. return bt;
    30. }
    31. int i = 1;//遍历序号的全局变量
    32. ElemType PreNode(BiTree b,int k) {
    33. char ch;
    34. //本算法查找二叉树先序遍历中第k个结点的值
    35. if (b == NULL) {//空结点,则返回特殊字符
    36. return '#';
    37. }
    38. if (i == k) {
    39. return b->data;
    40. }
    41. i++;//下一个结点
    42. ch = PreNode(b->lchild, k);//左子树中递归寻找
    43. if (ch != '#')//在左子树中,则返回该值
    44. return ch;
    45. ch = PreNode(b->rchild, k);//在右子树中递归寻找
    46. return ch;
    47. }
    48. void PreOrder(BiTree T) {
    49. if (T) {
    50. printf("%c ", T->data);
    51. PreOrder(T->lchild);
    52. PreOrder(T->rchild);
    53. }
    54. }
    55. int main() {
    56. BiTree T = (BiTree)malloc(sizeof(BiNode));
    57. T = Create(T);
    58. int num = 5;
    59. ElemType ch;
    60. ch = PreNode(T, num);
    61. if (ch != '#') {
    62. //递归先序遍历
    63. printf("递归先序遍历序列:");
    64. PreOrder(T);
    65. printf("\n先序遍历序列中第%d个结点值为:%c ", num, ch);
    66. }
    67. else {
    68. printf("该二叉树是一棵空树");
    69. }
    70. }

    实验结果图:

     

     

  • 相关阅读:
    物联网开发笔记(41)- 使用Micropython开发ESP32开发板之控制4*4矩阵键盘
    LeetCode——1175.质数排列
    MySQL主从复制
    2.14 PE结构:地址之间的转换
    Stream()流常用方法
    关于Java的类加载机制
    MySQL指令收集
    SpringBoot--参数校验--@Validated--使用/实例
    Vue--router和route的区别
    分享一下我家网络机柜,家庭网络设备推荐
  • 原文地址:https://blog.csdn.net/weixin_41987016/article/details/128138004