# 【LeetCode】做题家之563. Binary Tree Tilt

**URL:** <https://linux.do/t/topic/83696>\
**Category:** 开发调优\
**Tags:** Leetcode\
**Created:** [2024 年5 月 11 日 13:34 UTC](https://linux.do/t/topic/83696 "2024-05-11T13:34:35Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

作者： ![onewhite](https://cdn.ldstatic.com/user_avatar/linux.do/onewhite/32/1465205_2.png) [@onewhite](https://linux.do/u/onewhite)\
发布日期： [2024 年5 月 11 日 13:34 UTC](https://linux.do/t/topic/83696/1 "2024-05-11T13:34:35Z")

</div>

# 请看题

 ![](https://cdn3.ldstatic.com/original/3X/b/1/b1ff8380b7701ef0aa815f80238ed4301be0dccf.png)

## Example

 ![](https://cdn3.ldstatic.com/original/3X/7/3/73553708531b613ee9c349e63a816338fb3fabbd.png)  
 ![](https://cdn3.ldstatic.com/original/3X/e/0/e04564eaddc4d1b9e0814134c591491cd9cd0e2d.png)  
 ![](https://cdn3.ldstatic.com/original/3X/7/7/779ad72537ea1f460ea3b126cca446d3530a753e.png)

# 思路

还是熟悉的二叉树结构，我们还是可以继续用递归来解决

首先要判断的几个点是如果左节点或者右节点为空那么Tilt为0，如果不为空那么使用递归来进行获取到节点的值。每个节点的值都要进行 _abs(left - right)_ 操作，题目要求的。

首先要获取到左节点的孩子们所有的值，然后获取右节点孩子们的所有值，再然后进行获取Tilt，有点绕脑，但是递归能够很好的为我们解决这个问题

直接上代码了

## Code

```auto
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 * int val;
 * TreeNode *left;
 * TreeNode *right;
 * TreeNode() : val(0), left(nullptr), right(nullptr) {}
 * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    int answer;
    int solution(TreeNode *root)
    {
        int left = (root->left ? solution(root->left) : 0);
        int right = (root->right ? solution(root->right) : 0);
        answer += abs(left - right);

        return left + right + root->val;
    }
    int findTilt(TreeNode* root) {
        if(root)solution(root);
        return answer;
    }
};

```

## 代码解析

我定义了一个answer的值，此值用来返回Tilt答案，另外我还定义了一个solution函数来获取每个节点的值并且返回

在solution中，我使用了三元表达式，提一个小知识点

```auto
if(root != nullptr)和if(root)一个意思
if(root==nullptr)和if(!root)一个意思

```

如果当前节点不为空那么进行递归下一个节点，否则返回0；

然后进行对answer变量的值更改，每一次递归都会有新的值。

solution 返回的值为int，每一个int都会赋值给left 和 right 然后再对answer进行增加

* * *

在主函数中 findTilt(TreeNode \*root) 需要对当前节点进行判断是否为空，如果不为空，进行递归。

## 最后递归结束，answer的值已经达到了要求，返回answer

* * *

结束

---

<div class="post-metadata">

作者： ![Alzheimer](https://cdn.ldstatic.com/user_avatar/linux.do/alzheimer/32/129742_2.png) [@Alzheimer](https://linux.do/u/Alzheimer)\
发布日期： [2024 年7 月 26 日 08:19 UTC](https://linux.do/t/topic/83696/2 "2024-07-26T08:19:19Z")

</div>

这么好的帖子没人看吗

---

<div class="post-metadata">

作者： ![handsome](https://cdn.ldstatic.com/user_avatar/linux.do/handsome/32/2484898_2.png) [@handsome](https://linux.do/u/handsome)\
发布日期： [2024 年7 月 26 日 08:22 UTC](https://linux.do/t/topic/83696/3 "2024-07-26T08:22:40Z")

</div>

看过了，没看懂

---

<div class="post-metadata">

作者： ![system](https://cdn3.ldstatic.com/original/4X/c/c/d/ccd8c210609d498cbeb3d5201d4c259348447562.png) [@system](https://linux.do/u/system)\
发布日期： [2024 年12 月 9 日 16:11 UTC](https://linux.do/t/topic/83696/4 "2024-12-09T16:11:34Z")

</div>


