zoukankan      html  css  js  c++  java
  • 【算法题目】求二叉树中节点的最大距离

      如果我们把二叉树视为一个图,父子节点之间的连线视为双向的,我们姑且定义为“举例”为两节点之间边的个数。写一个程序求一颗二叉树中相距最远的两个节点之间的距离(《编程之美》3.8)

    思路:如果两个节点相距最远,一定是两个叶子节点,或者是一个叶子节点到它的根节点。

       根据相距最远的两个节点一定是叶子节点这个规律,我们可以进一步讨论。

         对于任意一个节点,以该节点为根,假设这个根有k个孩子节点,那么相距最远的两个节点U和V之间的路径与这个根节点的关系有两种情况。

        1.若路径经过根Root,则U和V是属于不同子树的,且它们都是该子树种到根节点最远的节点,否则跟它们的最远距离矛盾。

        2. 如果路径不经过Root,那么它们一定属于根的k个子树之一。并且它们也是该子树相距最远的两个顶点。

    参考资料:

      1. http://www.cnblogs.com/miloyip/archive/2010/02/25/1673114.html

    int GetMaxDistance(TreeNode* root) {
        if (root == NULL) return 0;
        
        int max_distance = INT_MIN;
    
        GetMaxDistance(root, INT_MIN);
    
        return max_distance
    }
    
    int GetMaxDistance(TreeNode* root, int &max_distance) {
        if (root == NULL) return -1;
    
        int left_max_depth = GetMaxDistance(root->left, &max_distance);
        int right_max_depth = GetMaxDistance(root->right, &max_distance);
    
        int temp_distance = left_max_depth + right_max_depth + 2;
    
        if (temp_distance > max_distance) max_distance = temp_distance;
    
        return left_max_depth > right_max_depth ? left_max_depth + 1 : right_max_depth + 1;
    }
  • 相关阅读:
    yeoman+grunt/gulp+bower构建angular项目
    eclipse配置svn 并从svn下载maven项目 配置tomcat启动maven项目(二)
    eclipse配置svn 并从svn下载maven项目 配置tomcat启动maven项目
    mysql Oracle常用使用区别
    海思平台交叉编译curl支持SSL功能
    Gitlab 自动构建心得
    openssl windows平台编译库
    更换树莓派源成国内源
    使用ntp协议同步本地时间(C语言)
    网络分析纪录
  • 原文地址:https://www.cnblogs.com/vincently/p/4740957.html
Copyright © 2011-2022 走看看