Java教程

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

}

这篇关于[2004年NOIP普及组] FBI树的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!