543.二叉树的高度(javascript)543.DiameterofBinaryTree
原创给定一棵二叉树,你需要计算它的直径长度。二叉树的直径长度是任意两个节点路径长度的最大值。此路径可以通过也可以不通过根节点。
Given the root of a binary tree, return the length of the diameter of the tree.
The diameter of a binary tree is the length of the longest path between any two nodes in a tree. This path may or may not pass through the root.
The length of a path between two nodes is represented by the number of edges between them.
示例 :
给定二叉树
1
/
2 3
/
4 5
返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。
注意:两个节点之间的路径长度表示为它们之间的边数。
解题思路
此过程使用后序遍历。
假设我们知道节点的左子向下遍历最多的节点。 L (即,以左子为根的子树的深度) 他的右儿子遍历通过最多的节点数。 R (即,以右子为根的子树的深度),则从该节点开始的路径通过的最大节点数为 L+R+1 。
var diameterOfBinaryTree = function(root) {
let answer=1
var dfs=function(root){
if(!root){
return 0// 访问空节点,返回0
}
let l=dfs(root.left)// 以左子为根的子树深度
let r=dfs(root.right)// 以右子为根的子树深度
answer=Math.max(answer,l+r+1)
return Math.max(l,r)+1 //返回其节点为根的子树的深度。,此处return这是必要的,否则调用方法也无法获得深度。
}
dfs(root)
return answer-1//以上步骤都是基于原来加一(加上后面的部分),所以这里只需减一就可以得到相应的值。
};
//这里的代码与上面的逻辑类似。
var diameterOfBinaryTree = function(root) {
let answer=0
var dfs=function(root){
if(!root){
return 0
}
let l=dfs(root.left)
let r=dfs(root.right)
answer=Math.max(answer,l+r)
return Math.max(l,r)+1
}
dfs(root)
return answer
};
leetcode: https://leetcode-cn.com/problems/diameter-of-binary-tree/
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除
itfan123





