• 扩展二叉树(信息学奥赛一本通 1340)


    【问题描述】

    由于先序、中序和后序序列中的任一个都不能唯一确定一棵二叉树,所以对二叉树做如下处理,将二叉树的空结点用·补齐,如图所示。我们把这样处理后的二叉树称为原二叉树的扩展二叉树,扩展二叉树的先序和后序序列能唯一确定其二叉树。 现给出扩展二叉树的先序序列,要求输出其中序和后序序列。

    【输入样例】

    tree_b.in ABD..EF..G..C..

    【输出样例】

    tree_b.out DBFEGAC DFGEBCA


    【方法一】数组模拟

    【方法二】指针

     1 #include <iostream>
     2 #include <stdlib.h>
     3 #include <string>
     4 #include <cstring>
     5 #include <algorithm>
     6 #include <cstdio>
     7 using namespace std;
     8 
     9 typedef struct node;
    10 typedef node *tree;
    11 struct node
    12 {
    13     char data;
    14     tree lchild, rchild;
    15 };
    16 tree bt;
    17 
    18 int i;
    19 string s;
    20 
    21 void build(tree &bt)  //建树
    22 {
    23     if(s[++i]!='.')
    24     {
    25         bt = new node; 
    26         bt = new node; 
    27         bt->data = s[i];
    28         build(bt->lchild);  
    29         build(bt->rchild);  
    30     }
    31     else bt = NULL;
    32 }
    33 void printzx(tree bt)  //输出中序序列 
    34 {
    35     if(bt)
    36     {
    37         printzx(bt->lchild);
    38         cout << bt->data;
    39         printzx(bt->rchild);
    40     }
    41 }
    42 void printhx(tree bt)  //输出后序序列 
    43 {
    44     if(bt)
    45     {
    46         printhx(bt->lchild);
    47         printhx(bt->rchild);
    48         cout << bt->data;
    49     }
    50 }
    51 int main()
    52 {
    53     cin >> s;
    54     i = -1;
    55     build(bt);
    56     printzx(bt);
    57     cout << endl;
    58     printhx(bt);
    59     cout << endl;
    60     return 0;
    61 }
  • 相关阅读:
    Selenium WebDriver 中鼠标和键盘事件分析及扩展
    Windows Mobile 常用键值VK对应表
    application.yml
    示例
    秒懂HTTPS接口(实现篇)
    秒懂HTTPS接口(接口测试篇)
    秒懂HTTPS接口(原理篇)
    SpringBoot全局捕获异常示例
    官方文档
    Python基础02——控制流
  • 原文地址:https://www.cnblogs.com/ljy-endl/p/11260494.html
Copyright © 2020-2023  润新知