Uva-699

Uva-699题解

Posted by 顾小五 on September 6, 2018

大致题意

题目原文

根据给出的序列计算二叉树重叠最后重叠数值

解题思路

二叉树基础题,虽然是基础题还是不会

这题可以不用建树

可以直接根据序列累加

开个数组就好了,然后读取序列,第一个是根节点,然后就是根节点的左子树,可以将其左子树节点当做根节点递归建树,如果是 -1 就是左子树为空,接下来的值就是根节点的右子树,也同样的递归建树

*构建代码如下


void calc(int center){
	sum[center] += inorder[nowindex++];
	if (inorder[nowindex] != -1)		//判断左子树,左子树非空,以左子树为中心节点建树
		calc(center - 1);
	else
		nowindex++;
	if (inorder[nowindex] != -1)		//判断右子树,右子树非空,以右子树为中心节点建树
		calc(center + 1);
	else
		nowindex++;
	return;
}

这题没有很难,明明就是很难

难点还是分析递归过程8

完整代码