求二叉树中节点的最大距离
来源:互联网 发布:mac qq接受文件没反应 编辑:程序博客网 时间:2024/06/03 23:34
题目描述
如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义“距离”为两个节点之间的变数。
写一个程序求一棵二叉树中相距最远的两个节点之间的距离。
输入要求
输入的第一行包含单独的一个数字T,表示测试序列的数目;
以下每一行为一个测试序列,测试序列是按先序序列输入字符 ,如果节点没有左或右孩子,则输入用空格表示,最后用一个空格结束一行的输入。
输出要求
输出二叉树中相距最远的两个节点之间的距离
假如输入
2
ABC DE G F
-+a *b -c d /e f
应当输出
4
6
如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义“距离”为两个节点之间的变数。
写一个程序求一棵二叉树中相距最远的两个节点之间的距离。
输入要求
输入的第一行包含单独的一个数字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 1
- 【二叉树】求二叉树中节点的最大距离
- 求二叉树中节点最大距离
- 3.8求二叉树中节点的最大距离
- 求二叉树中节点的最大距离
- 求二叉树中节点的最大距离
- 求二叉树中节点的最大距离
- 求二叉树中节点的最大距离
- 求二叉树中节点的最大距离
- 求二叉树中节点的最大距离
- 求二叉树中节点的最大距离
- 11、求二叉树中节点的最大距离...
- 求二叉树中节点的最大距离
- 求二叉树中节点的最大距离
- 求二叉树中两个节点的最大距离
- 求二叉树中节点的最大距离
- 求二叉树中节点的最大距离
- 求二叉树中节点的最大距离
- 求二叉树中节点的最大距离
- strtok()分割字符串函数
- Eclipse 启动不了 一闪而过
- STM32CUBE——6
- flask-SQLAlchemy一些使用技巧(关联关系的创建)
- VPN step by step
- 求二叉树中节点的最大距离
- 关系表达式的使用
- 02 JAVA 对象补充 抽象VS接口
- IOS开发中的委托模式
- 集合工具类
- Properties
- ShadowSocks 代理设置,超有用!
- 虚拟桌面
- [Elasticsearch] 向已存在的索引中添加自定义filter/analyzer