zoukankan      html  css  js  c++  java
  • (算法)二叉树两个结点的最远距离

    题目:

    求二叉树两个结点的最远距离。

    二叉树定义如下:

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

    思路:

    遍历每个节点,找出以当前节点为根的最长路径,然后找出所有最长路径中的最大值。

    代码:

    代码1:

    class Node{
    public:
        int val;
        Node* left;
        Node* right;
        int maxLeft;
        int maxRight;
    };
    
    void longestPath_1(Node* pRoot,int& maxLen){
        if(pRoot==NULL)
            return;
        if(pRoot->left==NULL)
            pRoot->maxLeft=0;
        if(pRoot->right==NULL)
            pRoot->maxRight=0;
    
        int leftLen;
        if(pRoot->left){
            longestPath_1(pRoot->left,maxLen);
            leftLen=1+max(pRoot->left->maxLeft,pRoot->left->maxRight);
            pRoot->maxLeft=leftLen;
        }
    
        int rightLen;
        if(pRoot->right){
            longestPath_1(pRoot->right,maxLen);
            rightLen=1+max(pRoot->right->maxLeft,pRoot->right->maxRight);
            pRoot->maxRight=rightLen;
        }
    
        maxLen=max(pRoot->maxLeft+pRoot->maxRight,maxLen);
    }

    代码2:

    class TreeNode{
    public:
        int val;
        TreeNode* left;
        TreeNode* right;
        TreeNode(int x):val(x),left(NULL),right(NULL){}
    };
    
    void longestPath(TreeNode* pRoot,int& maxLeft,int& maxRight,int& maxLen){
        if(pRoot==NULL){
            maxLeft=0;
            maxRight=0;
            maxLen=0;
            return;
        }
    
        int maxLeft_1,maxLeft_2,maxRight_1,maxRight_2;
        longestPath(pRoot->left,maxLeft_1,maxRight_1,maxLen);
        longestPath(pRoot->right,maxLeft_2,maxRight_2,maxLen);
    
        maxLeft=1+max(maxLeft_1,maxRight_1);
        maxRight=1+max(maxLeft_2,maxRight_2);
    
        maxLen=max(maxLeft,maxRight)+1;
    }
  • 相关阅读:
    Solidity notes
    Solidity by Example详解
    基本命令中部
    基本命令上部
    服务器介绍
    Linux发展史及安装
    ERROR: Unrecognized command line argument: 'use'
    RequireJs 深入理解
    Redis 安装教程 (Windows 2.6.13 稳定版)
    System.AccessViolationException: 尝试读取或写入受保护的内存 解决办法
  • 原文地址:https://www.cnblogs.com/AndyJee/p/4695813.html
Copyright © 2011-2022 走看看