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;
        }
    };
    
  • 相关阅读:
    docker 命令
    php cli命令
    windows 中docker连接使用mysql数据库
    什么是微服务
    PHP7新特性
    Docker Machine 命令
    关于Docker目录挂载的总结(二)
    实验十一 MySQLl备份与恢复1
    实验十--- MySQL过程式数据库对象
    实验九 存储函数和触发器
  • 原文地址:https://www.cnblogs.com/hunter-w/p/12658202.html
Copyright © 2011-2022 走看看