树563. 二叉树的坡度
Posted ocpc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树563. 二叉树的坡度相关的知识,希望对你有一定的参考价值。
题目:
解法:
方法:递归
算法:
从问题的描述中,可以清楚地了解到,我们需要在给定树的每个结点处找到其坡度,并将所有的坡度相加以获得最终结果。要找出任意结点的坡度,我们需要求出该结点的左子树上所有结点和以及其右子树上全部结点和的差值。
因此,为了找出解决方案,我们使用递归函数 traverse,在任何结点调用该函数,都会返回当前结点下面(包括其自身)的结点和。借助于任何结点的左右子结点的这一和值,我们可以直接获得该结点所对应的坡度。
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 13 int tilt=0; 14 int findTilt(TreeNode *root) 15 { 16 traverse(root); 17 return tilt; 18 } 19 20 int traverse(TreeNode *root) 21 { 22 if(root == NULL) 23 { 24 return 0; 25 } 26 int left=traverse(root->left); 27 int right=traverse(root->right); 28 29 tilt+=std::abs(left-right); 30 31 return left+right+root->val; 32 } 33 };
以上是关于树563. 二叉树的坡度的主要内容,如果未能解决你的问题,请参考以下文章