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即可
代码如下:
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; } } };
相关文章推荐
- LeetCode基础--二叉树--反转左右子树
- 【LeetCode111-120】很多道二叉树的问题(左右顺序很重要),一道hard DP题,两道杨辉三角以及一道DP三角
- 求二叉树中某结点的父结点(左右孩子表示法)
- 二叉树之调换左右孩子
- 二叉树互换左右孩子
- 编写一个递归算法,实现将一颗二叉树的左右孩子互换。
- C++二叉树左右孩子的交换
- LeetCode 刷题: 左右反转一个二叉树
- 把二叉树中每个节点左右孩子位置交换。
- 二叉树的各种实现(创建,叶子结点数,是否为堆,完全二叉树,二叉查找树,交换左右孩子)
- 每天一道LeetCode-----判断二叉树左右两边是否成镜像关系
- 编写一个递归算法,实现将一棵二叉树的左右孩子互换。
- 二叉树的各种实现(创建,叶子结点数,是否为堆,完全二叉树,二叉查找树,交换左右孩子)
- 查看一颗二叉树的每个节点的值是否都是其左右两个孩子节点值的和
- C++作业:将左右孩子互换 / 复制一棵二叉树
- 二叉树的各种实现(创建,叶子结点数,是否为堆,完全二叉树,二叉查找树,交换左右孩子)
- [leetcode]二叉树先序遍历
- Leetcode中几道二叉树题 I
- 二叉树总节点数为N个,它的叶节点数是多少呢?度为2的节点数呢?度为1的节点数呢?有多少个节点有左孩子?有多少个孩子有右孩子?
- [LeetCode]Flatten Binary Tree to Linked List(二叉树转链表)