标签:二叉树
Monkey VinesNote: The second line of sample input is a blank line.
题意:有一棵完整的二叉树,下面有一群猴子。要求出最小的猴子数量,来使这棵二叉树是平衡的。平衡就是指同一个父节点下面两个儿子节点上面呆的猴子数量必须相同。还有这个树上至少要有一只猴子。
思路:画几个图就可以看出,二叉树上如果想平衡,要看最深的节点的深度。2^dep 就是最少需要多少只猴子来平衡这棵树。但是输入的时候,所给的是用括号来表示这棵树。左括号是表示向下延伸,右括号表示回到父亲节点。注意这棵二叉树的根的上面还有一个根。所以要从图片中的黑色实心半球开始。图中红色数字表示那串左右括号,在这棵树上走的先后顺序。所以求深度,只用一次线性扫描就行了,左括号+,右括号-。
#include<stdio.h> #include<string> #include<iostream> #include<map> #include<string.h> #include<algorithm> using namespace std; int main() { int t; int cas=1; int n; char str[500]; int op; int ans,dep; scanf("%d",&t); getchar(); while(t--) { gets(str); ans=0; dep=0; for(int i=0;str[i];i++) { if(str[i]=='[') dep++; else dep--; if(dep>ans) ans=dep; } int er=1; for(int i=0;i<ans;i++) { er*=2; } printf("%d %d\n",cas++,er); } return 0; }
标签:二叉树
原文地址:http://blog.csdn.net/u013532224/article/details/43236521