您的位置:首页 > 编程语言 > C语言/C++

[LeetCode]543. Diameter of Binary Tree(计算二叉树的直径的长度)

2017-05-27 23:10 393 查看

543. Diameter of Binary Tree

原题链接

Given a binary tree, you need to compute 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.

给定一个二叉树,你需要计算树的直径的长度。 二叉树的直径是树中任意两个节点之间最长路径的长度。 此路径可能通过或不能通过根。

Example:

Given a binary tree

1
/ \
2   3
/ \
4   5
Return 3, which is the length of the path [4,2,1,3] or [5,2,1,3].


Note: The length of path between two nodes is represented by the number of edges between them.

注意:两个节点之间的路径长度由它们之间的边数表示。

思路:

定义一个变量diameter,保存给定二叉树最大diameter值。

通过递归计算左右子树的深度来计算每个节点的diameter,通过和变量 diameter 进行比较,保存较大值。

在每一次递归结束后,返回节点左右子树较大的深度,左子树和右子树的深度相加就是根该节点的diameter。

代码如下:

C++

struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

class Solution {
public:
int diameter  = 0;// 全局变量,记录最大直径
int diameterOfBinaryTree(TreeNode* root) {
if(root==nullptr || (root->left==nullptr && root->right==nullptr))//空节点 或者 左右孩子均为空的节点
return 0;
getDepth(root);
return diameter;
}
// 此函数是返回树的最大深度
int getDepth(TreeNode* root){
if(root == nullptr)
return 0;
int left = getDepth(root->left);
int right = getDepth(root->right);
if(left+right > diameter)//左子树和右子树的深度相加就是根该节点的直径
diameter = left + right;
return right>left ? right+1 : left+1;//返回节点左右子树中较大的深度
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐