博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
求二叉树中结点的最大距离 【微软面试100题 第十一题】
阅读量:7099 次
发布时间:2019-06-28

本文共 1844 字,大约阅读时间需要 6 分钟。

题目要求:

  如果我们把二叉树看成一个图,父子结点之间的连线看成是双向的,我们姑且定义“距离”为两节点之间边的个数。写一个程序,求一颗二叉树中距离最远的两个结点之间的距离。

  参考资料:编程之美3.8

题目分析:

  最远距离要么经过根结点,要么不经过根结点在左子树中,要么不经过根结点在右子树中。根据这个思路加上递归就可以实现代码。

代码实现:

 

#include 
using namespace std;typedef struct BinaryTree{ struct BinaryTree *left,*right; int data;}BinaryTree;void initTree(BinaryTree **p);int maxDistance(BinaryTree *root);int main(void){ BinaryTree *root; initTree(&root); cout << "The max distance is " << maxDistance(root) << endl; return 0;}int core(BinaryTree *root,int &depth);int max(int a,int b){ if(a>b) return a; else return b;}int maxDistance(BinaryTree *root){ int depth; return core(root,depth);}//depth为当前结点到叶子结点的最大长度//maxleft为当前结点的左子树中的最大距离//maxright为当前结点的右子树中的最大距离//因此最大距离要么是经过根结点的,则最大距离为ld+rd;要么是不经过根结点在左子树中//,则最大距离为maxleft;要么是不经过根结点在右子树中,则最大距离为maxright.int core(BinaryTree *root,int &depth){ if(root==NULL) { depth = 0; return 0; } int ld,rd; int maxleft = core(root->left,ld); int maxright = core(root->right,rd); depth = max(ld,rd)+1; return max(maxleft,max(maxright,ld+rd));}// 10// / \// 5 12// / \// 4 7void initTree(BinaryTree **p){ *p = new BinaryTree; (*p)->data = 10; BinaryTree *tmpNode = new BinaryTree; tmpNode->data = 5; (*p)->left = tmpNode; tmpNode = new BinaryTree; tmpNode->data = 12; (*p)->right = tmpNode; tmpNode->left = NULL; tmpNode->right = NULL; BinaryTree *currentNode = (*p)->left; tmpNode = new BinaryTree; tmpNode->data = 4; currentNode->left = tmpNode; tmpNode->left = NULL; tmpNode->right = NULL; tmpNode = new BinaryTree; tmpNode->data = 7; currentNode->right = tmpNode; tmpNode->left = NULL; tmpNode->right = NULL; }
View Code

 

转载于:https://www.cnblogs.com/tractorman/p/4055413.html

你可能感兴趣的文章
Docker简明教程(转)
查看>>
【JDK源码分析】String的存储区与不可变性(转)
查看>>
Window平台搭建Redis分布式缓存集群 (一)server搭建及性能測试
查看>>
SQL变量与全局变量
查看>>
bootstrap基础学习六篇
查看>>
[.net 面向对象程序设计深入](5)MVC 6 —— 构建跨平台.NET开发环境(Windows/Mac OS X/Linux)...
查看>>
Android横竖屏切换及其相应布局载入问题
查看>>
带辉光效果的跑马灯
查看>>
CSS隐藏元素的几个方法(display,visibility)的区别
查看>>
HTML 中的 dl(dt,dd)、ul(li)、ol(li)
查看>>
Linux下Redis主从复制以及SSDB主主复制环境部署记录
查看>>
如何让win10实现关机确认-暂没确认
查看>>
常用js函数整理--common.js
查看>>
java内存泄漏与内存溢出
查看>>
互联网服务器的实现过程需要考虑哪些安全问题 & 加解密及哈希知识点
查看>>
sql server2008给数据表,字段,添加修改注释
查看>>
meta标签清理缓存
查看>>
onvif开发之设备发现功能的实现--转
查看>>
虚拟机下linux迁移造成MAC地址异常处理办法
查看>>
数据库事务原子性、一致性是怎样实现的?[转]
查看>>