543-求二叉树直径

Posted nxnslc-blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了543-求二叉树直径相关的知识,希望对你有一定的参考价值。

假设我们知道对于该节点的左儿子向下遍历经过最多的节点数 L (即以左儿子为根的子树的深度) 和其右儿子向下遍历经过最多的节点数 R (即以右儿子为根的子树的深度),那么以该节点为起点的路径经过节点数的最大值即为 L+R+1

我们记节点 node 为起点的路径经过节点数的最大值为dnode,那么二叉树的直径就是所有节点 dnode的最大值减一。

最后的算法流程为:我们定义一个递归函数 depth(node) 计算 dnode.? 函数返回该节点为根的子树的深度。先递归调用左儿子和右儿子求得它们为根的子树的深度 L 和 RR,则该节点为根的子树的深度即为max(L,R)+1;该节点的 dnode值L+R+1 递归搜索每个节点并设一个全局变量 ans 记录 dnode? 最大值,最后返回 ans-1 即为树的直径。

链接:https://leetcode-cn.com/problems/diameter-of-binary-tree/solution/er-cha-shu-de-zhi-jing-by-leetcode-solution/

技术图片
 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     int length=0;
13     int diameterOfBinaryTree(TreeNode* root) {
14         depth(root);
15         return length;
16     }
17     int depth(TreeNode* root)
18     {
19         int L=depth(root->left);
20         int R=depth(root-right);
21         length=max(L+R,length);
22         return max(L,R)+1;
23     }
24 };
View Code

 

以上是关于543-求二叉树直径的主要内容,如果未能解决你的问题,请参考以下文章

二叉树的直径-leetocde543

543. 二叉树的直径

543-二叉树的直径

力扣543:二叉树的直径C++

leetcode104,111,543 求二叉树深度的dfs解法

543. 二叉树的直径