编辑代码

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
typedef struct node//二叉树的结点定义
{
    char data;
	//int eq;
    struct node *lchild;
    struct node *rchild;
}BiNode, *BiTree;
// 先序建立二叉树 (输入时,按先序次序输入二叉树中结点的值,以 # 字符表示空树)
BiTree createBiTree()
{
    BiTree T;
    char c;
    scanf("%c", &c);
    if (c == '#')
        T = NULL;
    else
    {
        T = (BiTree)malloc(sizeof(BiNode));
        T->data = c;
		//T->eq = -1;
        T->lchild = createBiTree();//先序创建左子树
        T->rchild = createBiTree();//先序创建右子树
    }
 
    return T;
}
int f(BiTree bt, int *eq) {
	int n,l,r;
	n=l=r=0;
	if(bt != NULL) {
		l=r=1;
		l += f(bt->lchild, eq);
		r += f(bt->rchild, eq);
		n = l+r-1;
		if((int)fabs(l-r) > *eq) {
            *eq = (int)fabs(l-r);
            printf("%c%d\n",bt->data,*eq);
        }
	}
	return n;
}

int main(int argc, const char * argv[]) {
 
    BiTree T = createBiTree(); // 建立
	int eq = -1;
    int num = f(T,&eq);
    printf("%d %d\n", num,eq);
    return 0;
}