求二叉树中节点的最大距离

题目描述

如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义“距离”为两个节点之间的变数。

写一个程序求一棵二叉树中相距最远的两个节点之间的距离。
输入要求

输入的第一行包含单独的一个数字T,表示测试序列的数目;
  以下每一行为一个测试序列,测试序列是按先序序列输入字符 ,如果节点没有左或右孩子,则输入用空格表示,最后用一个空格结束一行的输入。

输出要求

 输出二叉树中相距最远的两个节点之间的距离
假如输入

2
ABC  DE G  F    
-+a  *b  -c  d  /e  f   

应当输出

4
6


借鉴了许多代码,最后优deepth()化到最简已经,思路就是遍历每个节点,空节点为-1,最终的结果肯定是某个节点左子树的深度加上右子树的深度加2,所以求出每个节点左子树和右子树的深度,取左右子树深度之和加2的最大值即可。 

Code:



#include<bits/stdc++.h>
using namespace std;
typedef struct BTree
{
    char data;
    struct BTree *left,*right;
}BTree;
BTree *CreatBTree()
{    
    char ch=getchar();
    if(ch==' ')
        return NULL;
    BTree *temp=(BTree *)malloc(sizeof(BTree));
    temp->data=ch;
    temp->left=CreatBTree();
    temp->right=CreatBTree();
    return temp;
}
int deepth(BTree *T,int &maxDis)
{
    if(!T)
        return -1;
    int L=deepth(T->left,maxDis);
    int R=deepth(T->right,maxDis);
    maxDis=max(maxDis,L+R+2);
    return max(L,R)+1;
}
void delBTree(BTree *p)
{
    if(p)
    {
        delBTree(p->left);
        delBTree(p->right);
        free(p);
    }
}
int main()
{    
    int t;
    cin>>t;    
    while(t--)
    {    
        getchar();//吃掉回车
        int maxDis=-1;        
        BTree *root=CreatBTree();
        getchar();//吃掉最后结尾的空格
        deepth(root,maxDis);
        cout<<maxDis<<endl;
        delBTree(root);
    }
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值