http://uva.onlinejudge.org/external/116/11688.html
题意:给一颗二叉树,分别求出把其中一个节点旋转到根,得到的新二叉树的深度。
解析:给出递归计算公式和图解
dl:当前节点 旋转到根节点过程中,左旋次数。
dr:当前节点 旋转到根节点过程中,右旋次数。
hl:当前节点向左绕过根节点,能达到的最大深度。
hr:当前节点向右绕过根节点,能达到的最大深度。
void cal(int root,int hl,int hr,int dl,int dr){
if(!root)return;
int dL = h[l[root]];
int dR = h[r[root]];
dp[root] = 1 + max2(max2(hl,hr),max2(dl+dL,dr+dR));
cal(l[root],hl,max2(hr,1+dr+dR),dl,1+dr);
cal(r[root],max2(hl,1+dl+dL),hr,1+dl,dr);
}