zoukankan      html  css  js  c++  java
  • 543. 二叉树的直径

    描述

    给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。

    示例 :
    给定二叉树

          1
         / 
        2   3
       /      
      4   5    
    

    返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。

    注意:两结点之间的路径长度是以它们之间边的数目表示

    思路

    深度优先搜索,二叉树的直径为左子树的高度+右子树的高度,二叉树节点的高度为max(左子树高度,右子树高度)+1。
    注意:二叉树的最大直径不一定经过根节点,所有需要用一个全局变量记录经过每个节点的直径最大值。

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        int diameter=0;
        int dfs(TreeNode* root) {
            if(root->left==nullptr&&root->right==nullptr){
                return 0;
            }
            int lHeight=root->left==nullptr?0:dfs(root->left)+1;
            int rHeight=root->right==nullptr?0:dfs(root->right)+1;
            diameter=max(diameter,lHeight+rHeight);
            return max(lHeight,rHeight);
        }
    
        int diameterOfBinaryTree(TreeNode* root) {
            if(root==nullptr)
                return 0;
            dfs(root);
            return diameter;
        }
    };
    
  • 相关阅读:
    hive中named_struct构造和使用
    hive非分区表导入csv数据
    hive常用的日期函数
    hive mapreduce reducer 调优
    Hive Analytics Functions row_number rank over partition by
    skip-grant-tables
    VC中的字符串转换宏
    CMAKE的使用
    VSCODE C/C++配置
    libcurl,多线程,gzip,共享DNS
  • 原文地址:https://www.cnblogs.com/hunter-w/p/12658202.html
Copyright © 2011-2022 走看看