哪些网站可以做代理商,重庆网站建设解决方案及流程,wordpress互联网访问,中移建设 公司 网站543.二叉树的直径
原题#xff1a;
给你一棵二叉树的根节点#xff0c;返回该树的 直径 。
二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。
两节点之间路径的 长度 由它们之间边数表示。
解题思路#xff1a;
…543.二叉树的直径
原题
给你一棵二叉树的根节点返回该树的 直径 。
二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。
两节点之间路径的 长度 由它们之间边数表示。
解题思路
树类题目通常采用递归的解法这里我们可以将题目理解为求和左右节点最大的高度和首先将假设只有四个节点 我们先将问题分解为一个个子问题先递下去先向左遍历从1到2再到4发现4左右节点均为空其左右节点返回0归上去节点4返回1高度归到2节点处由于左侧已经归了上来则开始遍历右侧发现右侧为空返回0求取左右的最大高度结果为1再加上该节点本身的高度向上归返回2回到节点1节点1再重复节点2的操作返回最终结果4
顺着该思路我们便有如下代码
源代码
int highsum(struct TreeNode* root,int maxlen,int *maxans)
{if(!root){return 0;}int left_highthighsum(root-left,maxlen,maxans)1;int right_highthighsum(root-right,maxlen,maxans)1;maxlenfmax(left_hight,right_hight);*maxansfmax(*maxans,right_hightleft_hight-2);return maxlen;
}
int diameterOfBinaryTree(struct TreeNode* root) {int ans0;highsum(root,0,ans);return ans;
}