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

来源:互联网 发布:金百福软件 打不开 编辑:程序博客网 时间:2024/06/02 03:13

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;//返回节点左右子树中较大的深度    }};
原创粉丝点击