已知一棵非空二叉树结点的数据域为不等于0的整数,请编写程序找出该二叉树中叶结点数据值之和最大的层。
输入格式:
输入为一组用空格间隔的整数,个数不超过100个,表示带空指针信息的二叉树先根序列。
输出格式:
输出为一个整数,表示叶结点数据值之和最大的层,如果存在多个满足条件的层,则输出最下面一层。
输入样例1:
1 2 0 0 3 0 0
输出样例1:
1
输入样例2:
1 -2 0 0 3 -1 0 0 -1 0 0
输出样例2:
2
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
typedef struct BiTNode {
int data;
struct BiTNode* lchild, * rchild;
}BiTNode, * BiTree;
int arr[100] = { 0 };
BiTree CreateBiTree(BiTree T);
void PreTraverse(BiTree T, int i);
int main() {
int i = 0,max=0;
BiTree T = NULL;
T = CreateBiTree(T);
PreTraverse(T, i);
while (i++ < 100)
{
if (arr[i] != 0 && arr[i] >= arr[max])//叶子节点的最大值
max = i;
}
printf("%d", max);
return 0;
}
BiTree CreateBiTree(BiTree T)
{
int ex;
scanf("%d", &ex);
if (ex == 0)
T = NULL;
else
{
T = (BiTree)malloc(sizeof(BiTNode));
T->data = ex;
T->lchild = CreateBiTree(T->lchild);
T->rchild = CreateBiTree(T->rchild);
}
return T;
}
void PreTraverse(BiTree T, int i)
{
if (T)
{
if (!T->lchild && !T->rchild)
{
arr[i] = arr[i] + T->data;
}
i++;
PreTraverse(T->lchild,i);
PreTraverse(T->rchild,i);
}
}