#P4056. 二叉树的直径

题目内容
给你一棵二叉树的根节点,输出该树的直径 。
二叉树的 直径是指树中任意两个节点之间最长路径的 长度。这条路径可能经过也可能不经过根节点 root 。
两节点之间路径的长度 由它们之间边数表示。

输入描述
一行包含二叉树的序列化数组,节点值之间用空格隔开,空节点用null表示。

输出描述
输出该二叉树的直径,即最长路径上的边数。

样例1
image
输入
1 2 3 4 5
输出
3
说明
3 ,取路径[4,2,1,3] 或[5,2,1,3] 的长度。

样例2
输入
1 2
输出
1
提示
树中节点数目在范围 [1, 10^4]内-100 <= Node.val <= 100

核心代码:

int ans=0;
int dfs(TreeNode* root) {
    if (root==nullptr) {
        return 0;
    }
    int maxl=dfs(root->left);
    int maxr=dfs(root->right);
    ans=max(ans,maxl+maxr+1);
    return max(maxl,maxr)+1;
}
#include <iostream>
#include <algorithm>
#include<queue>
#include<sstream>
#include <cstring>
#include <stack>
using namespace  std;
struct TreeNode {
    TreeNode* left;
    TreeNode* right;
    int val;
    TreeNode(int x):val(x),left(nullptr),right(nullptr){}
};
//层序遍历构造树
TreeNode * buildTree(vector<string> & order_lever) {
    if (order_lever[0]=="null"||order_lever.empty()) {
        return nullptr;
    }
    int i=0;
    queue<TreeNode*> q;
    TreeNode * root=new TreeNode(stoi(order_lever[i++]));
    q.push(root);
    while (i<order_lever.size()) {
        TreeNode* current=q.front();
        q.pop();
        if (i<order_lever.size()&&order_lever[i]!="null") {
            current->left=new TreeNode(stoi(order_lever[i]));
            q.push(current->left);
        }
        i++;
        if (i<order_lever.size()&&order_lever[i]!="null") {
            current->right=new TreeNode(stoi(order_lever[i]));
            q.push(current->right);
        }
        i++;
    }
    return root;
}
int ans=0;
int dfs(TreeNode* root) {
    if (root==nullptr) {
        return 0;
    }
    int maxl=dfs(root->left);
    int maxr=dfs(root->right);
    ans=max(ans,maxl+maxr+1);
    return max(maxl,maxr)+1;
}
int main() {
    string input,token;
    getline(cin,input);
    istringstream iss(input);
    vector<string> order_lever;
    while (iss>>token) {
        order_lever.push_back(token);
    }
    TreeNode* root=buildTree(order_lever);
    dfs(root);
    cout<<ans-1<<endl;
    return 0;
}
posted @ 2025-06-20 13:48  lipu123  阅读(5)  评论(0)    收藏  举报