您的位置:首页 > 房产 > 建筑 > 算法day16(补第15天)|用递归方法求解:513.找树左下角的值

算法day16(补第15天)|用递归方法求解:513.找树左下角的值

2024/10/6 0:34:19 来源:https://blog.csdn.net/2402_84438596/article/details/141726139  浏览:    关键词:算法day16(补第15天)|用递归方法求解:513.找树左下角的值

@TOC

513.找树左下角的值

递归法(补day15)

难度较大,代码如下:

class Solution {
public:int result;int maxdepth=INT_MIN;void traversal(TreeNode* root,int depth){if(root->left==nullptr&&root->right==nullptr){if(maxdepth<depth){maxdepth=depth;result=root->val;}return;}if(root->left){depth++;traversal(root->left,depth);depth--;}if(root->right){depth++;traversal(root->right,depth);depth--;}}int findBottomLeftValue(TreeNode* root) {int depth=1;traversal(root,depth);return result; }
};

总体思路(递归):

  • 参数:在这题中,深度是至关重要的参数,因为当遍历到叶子结点时,我们只有通过深度的大小来判断它是否是最后一层的结点。所以,深度肯定是在遍历中要变化的,所以把深度作为一个重要参数
  • **终止条件:**当以叶节点为终止条件时,基本上都伴有终止行为,这两者是相辅相成的。因为最后的结果也只能在叶节点出获取,所以也已叶节点为终止条件。这类题目一般会伴有回溯。
  • **单层递归逻辑:**由于没有什么对当前结点的操作,所以没有”中“了,直接上左右孩子。但是必须保证的是,左孩子一点过要在右孩子之前,目的:当左右孩子同时身处最后一层时,是左孩子先触碰到终止条件然后被赋值,然后右孩子再碰到终止条件,但是由于此时的depth==maxdepth,所以不能改变最后的result了,这就是此题最精妙之处。

一些代码细节

class Solution {
public:int result;int maxdepth=INT_MIN;
  • 在力扣里面是可以设置一些全局变量的,这些全局变量在递归函数里面赋完值之后,回到主函数里面依然是递归函数里面所赋的值——即全局。
  • 还有一些贯穿整个递归过程的变量也可以作为全局变量,如此处的maxdepth,之前的vector result也是可以的。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com