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 };
以上是关于543-求二叉树直径的主要内容,如果未能解决你的问题,请参考以下文章