其他分享
首页 > 其他分享> > [2004年NOIP普及组] FBI树

[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;

}

标签:遍历,string,NOIP,cout,substr,length,2004,FBI,postorder
来源: https://www.cnblogs.com/xdzxyingrui/p/16589689.html