[2004年NOIP普及组] FBI树

[2004年NOIP普及组] FBI树

思路:运用递归。已知“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串。

写一个后序遍历的函数,然后递归,自己调用自己就好了。每次输出根节点,直至全部输出。

代码如下:

#include<bits/stdc++.h>

using namespace std;

string s;

void postorder(string s)//后序遍历 

{ //左、右、根

    if(s.length()>1)

    {//递归函数,自己调用自己

     //substr函数第一个参数是起点下标,第二个参数是从起点开始截取几个字符(不是终点下标)!!!

     //也就是substr的用法,前面参数表示起始位置,后面那个参数表示长度

           postorder(s.substr(0,s.length()/2));//遍历左子树

        postorder(s.substr(s.length()/2,s.length()/2));//遍历右子树

      }

      //访问根,输出

      if(s==string(s.length(),'0'))//由0组成,输出B

        cout<<"B";

      else if(s==string(s.length(),'1'))//由1组成,输出I

        cout<<"I";

      else

        cout<<"F";

}

int main()

{

    int n;

      cin>>n>>s;

      postorder(s);

      return 0;

}

posted @ 2022-08-15 21:23  shanyingrui  阅读(105)  评论(0编辑  收藏  举报