• 【洛谷】P1305 新二叉树


    题目链接

    题目描述

    输入一串二叉树,用遍历前序打出。

    输入输出格式

    输入格式:

    第一行为二叉树的节点数n。(n≤26)

    后面n行,每一个字母为节点,后两个字母分别为其左右儿子。

    空节点用*表示

    输出格式:

    前序排列的二叉树

    输入输出样例

    输入样例1: 

    6
    abc
    bdi
    cj*
    d**
    i**
    j**

    输出样例1:

    abdicj

    看题解是根结点在第一行。如果不在第一行是会有一点点麻烦。

    根结点在第一行的AC代码:

     1 ////CSDN博客:https://blog.csdn.net/qq_40889820
     2 #include<iostream>
     3 #include<sstream>
     4 #include<algorithm>
     5 #include<string>
     6 #include<cstring>
     7 #include<iomanip>
     8 #include<vector>
     9 #include<cmath>
    10 #include<ctime>
    11 #include<stack>
    12 #include<queue>
    13 #include<map>
    14 #define mem(a,b) memset(a,b,sizeof(a))
    15 #define e 2.71828182
    16 #define Pi 3.141592654
    17 using namespace std;
    18 struct node
    19 {
    20         char ele;
    21     node* lc;
    22     node* rc;    
    23     node(char c)
    24     {
    25         ele=c;lc=rc=NULL;
    26     }
    27 }; 
    28 node* root=NULL;
    29 node* Find(char ch,node* n)
    30 {
    31     if(n==NULL) return NULL;
    32     if(n->ele==ch) return n;
    33     node* ans=Find(ch,n->lc);//先找左子树 
    34     if(ans) return ans;//找到了就返回 
    35     else return Find(ch,n->rc); //左子树没找到在右子树找 
    36     
    37 }
    38 void add_2node(string str)
    39 {
    40     char c=str[0],l=str[1],r=str[2];
    41     node* pos=Find(c,root);
    42     node* lchild=new node(l);
    43     node* rchild=new node(r);
    44     pos->lc=lchild;
    45     pos->rc=rchild;
    46     return;
    47 }
    48 void preorder(node* n)
    49 {
    50     if(n->ele=='*'||n==NULL) return;
    51     cout<<n->ele;
    52     preorder(n->lc);
    53     preorder(n->rc);
    54 }
    55 int main()
    56 {
    57     int n;
    58     cin>>n;
    59     for(int i=1;i<=n;i++)
    60     {
    61         string str;
    62         cin>>str;
    63         if(i==1) root=new node(str[0]);//题目中根结点在第一行 
    64         add_2node(str);
    65     }
    66     preorder(root);
    67 }
    View Code

    根结点不在第一行(不知道A没AC代码):

     1 ////CSDN博客:https://blog.csdn.net/qq_40889820
     2 #include<iostream>
     3 #include<sstream>
     4 #include<algorithm>
     5 #include<string>
     6 #include<cstring>
     7 #include<iomanip>
     8 #include<vector>
     9 #include<cmath>
    10 #include<ctime>
    11 #include<stack>
    12 #include<queue>
    13 #include<map>
    14 #define mem(a,b) memset(a,b,sizeof(a))
    15 #define e 2.71828182
    16 #define Pi 3.141592654
    17 using namespace std;
    18 struct node
    19 {
    20         char ele;
    21     node* lc;
    22     node* rc;    
    23     node(char c)
    24     {
    25         ele=c;lc=rc=NULL;
    26     }
    27 }; 
    28 node* root=NULL;
    29 node* Find(char ch,node* n)
    30 {
    31     if(n==NULL) return NULL;
    32     if(n->ele==ch) return n;
    33     node* ans=Find(ch,n->lc);//先找左子树 
    34     if(ans) return ans;//找到了就返回 
    35     else return Find(ch,n->rc); //左子树没找到在右子树找 
    36     
    37 }
    38 void add_2node(string str)
    39 {
    40     char c=str[0],l=str[1],r=str[2];
    41     node* pos=Find(c,root);
    42     if(pos!=NULL)
    43     {
    44         pos->lc=new node(l);
    45         pos->rc=new node(r);
    46     } 
    47     //原先的根结点是新读入结点的左子结点 
    48     else if((pos=Find(l,root))!=NULL)
    49     {
    50         node* ne=new node(c);
    51         ne->lc=root;
    52         ne->rc=new node(r);
    53         root=ne;
    54     } 
    55     //原先的根结点是新读入结点的右子结点 
    56     else 
    57     {
    58         node* ne=new node(c);
    59         ne->rc=root;
    60         ne->lc=new node(l);
    61         root=ne;
    62     }
    63     return;
    64 }
    65 void preorder(node* n)
    66 {
    67     if(n->ele=='*'||n==NULL) return;
    68     cout<<n->ele;
    69     preorder(n->lc);
    70     preorder(n->rc);
    71 }
    72 int main()
    73 {
    74     int n;
    75     cin>>n;
    76     for(int i=1;i<=n;i++)
    77     {
    78         string str;
    79         cin>>str;
    80         if(i==1) root=new node(str[0]);//先假定在第一行 
    81         add_2node(str);
    82     }
    83     preorder(root);
    84 }
    View Code
  • 相关阅读:
    MS Sq l数据类型
    northwind数据库介绍
    div使用jqueryui 源码 | gridview多个功能的源码
    gridview 经典
    文件流的方式下载文件
    sql(一)( )
    c# 和 .net (一)()
    html 和 html5(一)(表格 | 列表 | 提交按钮 | 单选 |复选 | 框架 | 脚本 | html字符实体 )
    狂神Redis笔记(上)
    狂神说 MyBatisPlus 学习笔记
  • 原文地址:https://www.cnblogs.com/wangzhebufangqi/p/12796087.html
Copyright © 2020-2023  润新知