【543 Diameter of Binary Tree】深度优先搜素思维运用

本文介绍了如何利用深度优先搜索(DFS)解决二叉树中寻找最大路径长度的问题。关键在于理解最长路径可能不经过根节点,并通过DFS遍历每个节点,更新最长路径记录。

一、题目解析

这道题题意就是一个二叉树找出路径长度最大的两个点,并将这两个点的路径长度输出为结果。需要注意的就是路径不一定非得经过根节点,这也是容易犯错的地方,也是这道题的难点所在。

二、思路分析

这道题首先很容易想到从根节点开始,分别计算左右子节点的深度然后相加即为结果,这种思路是最容易误入的。因为最长路径很可能是不经过根节点的。那么从深度优先搜索DFS的思想出发,从某一节点开始,计算路过以该节点为根节点的最长路径,并将其与之前的最长路径进行比较,若大于当前最长路径,则新路径为最长路径,否则之前的路径仍旧为最长路径。在计算某一节点的最长路径时,即为该节点开始左右子树的深度和。那么DFS遍历这棵二叉树的每一个节点,就可以计算出这棵二叉树两叶子节点之间的最长路径了。

三、代码实现

class Solution {
public:
    int maxdiadepth = 0;
    
    int dfs(TreeNode* root){        
        if(root == NULL) return 0;
        
        int leftdepth = dfs(root->left);
        int rightde
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值