您的位置:首页 > 其它

leetcode 563. Binary Tree Tilt 二叉树的左右孩子绝对差之和 + DFS深度优先遍历

2017-12-19 09:14 323 查看
Given a binary tree, return the tilt of the whole tree.

The tilt of a tree node is defined as the absolute difference between the sum of all left subtree node values and the sum of all right subtree node values. Null node has tilt 0.

The tilt of the whole tree is defined as the sum of all nodes’ tilt.

Example:

Input:

1

/ \

2 3

Output: 1

Explanation:

Tilt of node 2 : 0

Tilt of node 3 : 0

Tilt of node 1 : |2-3| = 1

Tilt of binary tree : 0 + 0 + 1 = 1

Note:

The sum of node values in any subtree won’t exceed the range of 32-bit integer.

All the tilt values won’t exceed the range of 32-bit integer.

题意很简单,就是求左右子树的结点和然后求绝对差,直接深度优先遍历DFS即可

代码如下:

#include <iostream>
#include <vector>
#include <map>
#include <unordered_map>
#include <set>
#include <unordered_set>
#include <queue>
#include <stack>
#include <string>
#include <climits>
#include <algorithm>
#include <sstream>
#include <functional>
#include <bitset>
#include <numeric>
#include <cmath>
#include <regex>
#include <iomanip>

using namespace std;

/*
struct TreeNode
{
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
*/

class Solution
{
public:
vector<int> res;
int findTilt(TreeNode* root)
{
dfs(root);
return accumulate(res.begin(), res.end(), 0);
}

int dfs(TreeNode* root)
{
if (root == NULL)
return 0;
else
{
int left = dfs(root->left);
int right = dfs(root->right);
res.push_back(abs(left - right));
return left + right + root->val;
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐