给定一个二叉树,对于这个二叉树结点的值,同一个边上的值不能同时选取(即两个结点的关系为双亲和孩子的关系, 则两个结点在同一个边上, 那么这两个结点至多只能选取一个),将选取的结点的值相加, 求这个二叉树所能选取出的结点值的和的最大值。输入的严格按照二叉树的先序遍历构造二叉树。
如:输入序列 3 2 0 3 00 3 0 1 0 0,(0代表空节点)画出如下二叉树,最大值为3+3+1=7。
3
/ \
2 3
\ \
3 1
3
/ \
4 5
/ \ \
1 3 1
二叉树节点参考定义为如下形式。
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
*/
输入:
3 2 0 3 0 0 3 0 1 0 0
3 4 1 0 0 3 0 0 5 0 1 0 0
输出:
7
9