標籤:leetcode roo 思路 code efi .com 好的 int div
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