SPOJ NICEBTRE - Nice Binary Trees(树 先序遍历)

传送门

Description

Binary trees can sometimes be very difficult to work with. Fortunately, there is a class of trees with some really nice properties. A rooted binary tree is called “nice”, if every node is either a leaf, or has exactly two children.

For example, the following tree is nice,

SPOJ NICEBTRE - Nice Binary Trees(树 先序遍历)_第1张图片

but the following tree is not.

SPOJ NICEBTRE - Nice Binary Trees(树 先序遍历)_第2张图片

The leaves of a nice binary tree are labeled by the letter ‘l’, and other nodes are labeled by the letter ‘n’.

Given the pre-order traversal of a nice binary tree, you are required to find the depth of the tree.

Notes : 

1. The depth of a tree is defined as the length of the longest path with one end at the root.

2. The pre-order traversal of the tree in the first image above produces the string “nlnnlll”.

Input

The first line contains the number of test cases T. T lines follow. Each line contains a string, which represents the pre-order traversal of a “nice” binary tree. Leaves are represented by the letter ‘l’ and other nodes by the letter ‘n’. The input is guaranteed to be the preorder traversal of a nice binary tree.

0 < T < 20

Length of the input string in each test case is at most 10000.

Output

Output one line for each test case, containing a single integer, the depth of tree.

Sample Input

3
l
nlnll
nlnnlll

Sample Output

0
2
3

 

#include
using namespace std;
const int maxn = 10005;
char str[maxn];
int pos,height;

void dfs(int depth){
	pos++;
	height = max(depth,height);
	if (str[pos] == '\0')	return;
	if (str[pos] == 'l')	return;
	if (str[pos] == 'n'){
		dfs(depth + 1);  //left
		dfs(depth + 1);  //right;
	}
}


int main(){
	int T;
	scanf("%d",&T);
	while (T--){
		memset(str,0,sizeof(str));
		height = 0,pos = -1;
		scanf("%s",str);
		dfs(0);
		cout << height << endl;
	}
	return 0;
}

  

你可能感兴趣的:(SPOJ NICEBTRE - Nice Binary Trees(树 先序遍历))