【IT笔试面试题整理】 二叉树任意两个节点间最大距离
求一个二叉树中任意两个节点间的最大距离,两个节点的距离的定义是这两个节点间边的个数, 比如某个孩子节点和父节点间的距离是1,和相邻兄弟节点间的距离是2,优化时间空间复杂度。
一种是:经过根节点,此时只需要求出左右子树的最大深度就可以
另一种:不经过根节点,此时需要递归求解左右子树,然后比较左右子树中最大距离,求大者
1 #include "stdio.h" 2 #include"stdlib.h" 3 struct NODE 4 { 5 NODE* pLeft; // 左子树 6 NODE* pRight; // 右子树 7 int nMaxLeft; // 左子树中的最长距离 8 int nMaxRight; // 右子树中的最长距离 9 int chValue; // 该节点的值 10 }; 11 12 int nMaxLen = 0; 13 14 // 寻找树中最长的两段距离 15 void FindMaxLen(NODE* pRoot) 16 { 17 // 遍历到叶子节点,返回 18 if(pRoot == NULL) 19 return; 20 21 // 如果左子树为空,那么该节点的左边最长距离为0 22 if(pRoot -> pLeft == NULL) 23 pRoot -> nMaxLeft = 0; 24 25 26 // 如果右子树为空,那么该节点的右边最长距离为0 27 if(pRoot -> pRight == NULL) 28 pRoot -> nMaxRight = 0; 29 30 31 // 如果左子树不为空,递归寻找左子树最长距离 32 if(pRoot -> pLeft != NULL) 33 FindMaxLen(pRoot -> pLeft); 34 35 36 // 如果右子树不为空,递归寻找右子树最长距离 37 if(pRoot -> pRight != NULL) 38 FindMaxLen(pRoot -> pRight); 39 40 41 // 计算左子树最长节点距离 42 if(pRoot -> pLeft != NULL) 43 { 44 int nTempMax = 0; 45 if(pRoot -> pLeft -> nMaxLeft > pRoot -> pLeft -> nMaxRight) 46 { 47 nTempMax = pRoot -> pLeft -> nMaxLeft; 48 } 49 else 50 { 51 nTempMax = pRoot -> pLeft -> nMaxRight; 52 } 53 pRoot -> nMaxLeft = nTempMax + 1; 54 } 55 56 // 计算右子树最长节点距离 57 if(pRoot -> pRight != NULL) 58 { 59 int nTempMax = 0; 60 if(pRoot -> pRight -> nMaxLeft > pRoot -> pRight -> nMaxRight) 61 { 62 nTempMax = pRoot -> pRight -> nMaxLeft; 63 } 64 else 65 { 66 nTempMax = pRoot -> pRight -> nMaxRight; 67 } 68 pRoot -> nMaxRight = nTempMax + 1; 69 } 70 71 // 更新最长距离 72 if(pRoot -> nMaxLeft + pRoot -> nMaxRight > nMaxLen) 73 { 74 nMaxLen = pRoot -> nMaxLeft + pRoot -> nMaxRight; 75 } 76 } 77 78 NODE *createTree() 79 { 80 NODE *root; 81 int data; 82 printf("input data:"); 83 scanf("%d",&data); 84 //printf("output data:%d\n",data); 85 86 if(data==0) 87 root=NULL; 88 else/*根左右 前序建立二叉树*/ 89 { 90 root=(NODE*)malloc(sizeof(NODE)); 91 root->chValue=data; 92 root->pLeft=createTree(); 93 root->pRight=createTree(); 94 } 95 return root; 96 } 97 int main() 98 { 99 NODE *root; 100 root=createTree(); 101 FindMaxLen(root); 102 103 printf("%d",nMaxLen); 104 return 0; 105 }
转载于:https://www.cnblogs.com/WayneZeng/archive/2013/04/21/3034187.html
【IT笔试面试题整理】 二叉树任意两个节点间最大距离相关推荐
- 【算法系列之十三】二叉树两叶节点的最大距离
1.题目描述 给定一棵二叉树,计算这课二叉树的直径长度,即为二叉树任意两个节点间的最长路径.比如: 这棵二叉树的最长路径为3. 2.解题思路 使用递归进行求解,每次递归的过程中,先求出 ...
- 【IT笔试面试题整理】寻找二叉树两节点的最近的公共祖先
[试题描述] 求二叉树中任意两个节点的最近公共祖先也称为LCA问题(Lowest Common Ancestor). 二叉查找树 如果该二叉树是二叉查找树,那么求解LCA十分简单. 基本思想为:从树根 ...
- 算法----- 给定一颗二叉树,找到二叉树上任意两个节点之间的距离(Java版本)
题目: 给定一颗二叉树,找到二叉树上任意两个节点之间的距离 class TreeNode {TreeNode left;TreeNode right;} 思路: 首先找到一个节点的路径,然后找到另一个 ...
- 二叉树任意两节点之间的最短距离
public class 二叉树任意两节点之间的路径 {public static void main(String[] args) {TreeNode node = new TreeNode(1); ...
- 求一颗二叉树中两个节点的最低公共父节点
题目:求一棵二叉树中两个节点的最低公共父节点 思路:递归 和 非递归 public static TreeNode getLastCommonParentRec(TreeNode root, Tree ...
- 程序员面试100题之十六:二叉树中两个节点的最近公共父节点(最低的二叉树共同祖先)
这个问题可以分为三种情况来考虑: 情况一:root未知,但是每个节点都有parent指针 此时可以分别从两个节点开始,沿着parent指针走向根节点,得到两个链表,然后求两个链表的第一个公共节点,这个 ...
- 学校的校园景点平面图(校园景点迷你地图C++数据结构)(查询图中顶点间的最短路径查询图中任意两个顶点间的所有路径)
学校的校园景点平面图(校园景点迷你地图C++&数据结构) 设计要求: (1)建图 以图中顶点表示主要景点,并存放景点的编号.名称.简介等信息: (2)查询 该系统可以查询景点的信息: 查询图中 ...
- zabbix使用fping监控任意两个节点之间的网络质量、丢包率和响应时间
zabbix使用fping监控任意两个节点之间的网络质量.丢包率和响应时间 zabbix使用fping监控任意两个节点之间的网络质量.丢包率和响应时间之前的博文 使用zabbix3.0.4的ICMP ...
- 求二叉树中两个节点最远的距离
一说到二叉树,就有很多题目,今天在编程之美中看到了二叉树中两个节点最远的距离.所以给想借机写一篇博客. 在开始之前,我们先想想,两个最常节点的最远距离是怎么样的? 情况一:最大距离可能一个在左子树,一 ...
最新文章
- AlphaGo之后,DeepMind重磅推出AlphaFold:基因序列预测蛋白质结构
- 【alibaba-cloud】SpringCloud和SpringCloud对比
- 图解当前最强语言模型BERT:NLP是如何攻克迁移学习的?
- 今日头条架构演进之路——高压下的架构演进专题
- 用jquery给Struts2的s:radio /标签添加change事件
- 再谈贝叶斯学派与频率学派的区别
- [NAACL19]一个更好更快更强的序列标注成分句法分析器
- python注释中文_python注释不能识别中文
- Hive窗口函数之preceding and following
- ROTATED REGION BASED CNN FOR SHIP DETECTION 基于旋转区域的CNN舰船检测
- FC6下的ftp服务和telnet服务安装
- 【指标计算】老妈再也不担心我的指标算不好了(教你用MyTT、TA-Lib、Pandas TA计算股票指标,附源代码)
- 国产手机设计业遭遇拐点 萧条期寻觅突围路
- java猜单词游戏_Java_初级编程,猜英文单词游戏
- Java故事之路在脚下
- 关于Oracle执行sql语句报错[ORA-01722: invalid number]无效数字解决思路
- 逆变电源于滤波电感器
- 网络投票器软件摄影投票比赛链接制作手机制作投票链接手机投票
- 2345王牌输入法的卸载
- 【漏网之鱼】Ansible AWX调用playbook传参问题
热门文章
- 【聊透SpringMVC】自学java和三大框架要多久
- 【深夜思考】java百度云资源
- 【408预推免复习】计算机组成原理之CPU的结构和功能
- 【PAT (Advanced Level) Practice】1124 Raffle for Weibo Followers (20 分)
- ai3中文语音补丁_NS 暗黑破坏神3 中文补丁今日上线!刷起来
- html响应式导航栏制作,用Sass制作响应式导航栏(原创)
- sleep头文件linux,Linux下的sleep函数 要用的话得包涵什么头文件啊?
- 网站地图对优化的优势有哪些?
- php关于路由,PHP URL路由类实例
- python字符串大写字母个数_python判断字符串是字母 数字 大小写(转载)