563. Binary Tree Tilt
Posted agentgamer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了563. Binary Tree Tilt相关的知识,希望对你有一定的参考价值。
https://leetcode.com/problems/binary-tree-tilt/description/
挺好的一个题目,审题不清的话很容易做错。主要是tilt of whole tree 的定义是sum of all node‘s tilt 而不是想当然的tilt of root.
一开是我就以为是简单的tilt of root 导致完全错误。思路其实可以看作是求sum of children 的变种,只是这里不仅要跟踪每个子树的sum 还要累计上他们的tilt。
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: int tiltIter(TreeNode* root, int *t) { if (root == nullptr) { return 0; } int leftSum = 0; int rightSum = 0; if (root->left != nullptr) { leftSum = tiltIter(root->left, t); } if (root->right != nullptr) { rightSum = tiltIter(root->right, t); } //tilt of the current node; int tilt = abs(leftSum - rightSum); *t += tilt; return root->val + leftSum + rightSum; } int findTilt(TreeNode* root) { int tilt = 0; tiltIter(root, &tilt); return tilt; } };
以上是关于563. Binary Tree Tilt的主要内容,如果未能解决你的问题,请参考以下文章