二叉树中相距最远的两个节点之间的距离
来源:互联网 发布:外网端口映射软件 编辑:程序博客网 时间:2024/06/07 03:05
题目:在一棵二叉树中,找出相距最远的两个节点之间的距离,函数返回距离值(提示:递归)
解答:这是2015年微软校招面试中的一道题目,如果能想到这两个节点必定在某个节点的左右子树中,那么只要找到该节点左子树中最深的节点以及右子树中最深的节点,二者之和即为左右最深节点的距离,如果对每个节点做同样的运算,取最大值,那么可以得到最远距离。重复地计算每一个节点必然提高时间复杂度,所以递归是一个不错的方式。
struct TreeNode{int m_data;TreeNode* m_pLeft;TreeNode* m_pRight;TreeNode(const int data = 0,TreeNode* left=NULL,TreeNode* right=NULL):m_data(data),m_pLeft(left),m_pRight(right){}};int LongestPathRecursive(TreeNode* pNode,int& left_len,int& right_len,int& max_len){if(NULL == pNode){left_len = 0;right_len = 0;max_len = 0;return max_len;}int left_left_len = 0;int left_right_len = 0;int left_max_len = 0;int right_left_len = 0;int right_right_len = 0;int right_max_len = 0;LongestPathRecursive(pNode->m_pLeft,left_left_len,left_right_len,left_max_len);LongestPathRecursive(pNode->m_pRight,right_left_len,right_right_len,right_max_len);left_len = max(left_left_len,left_right_len) + 1;right_len = max(right_left_len,right_right_len) + 1;max_len = max(left_left_len+right_left_len,max(left_max_len,right_max_len));return max_len;}int LongestPath(TreeNode* pRoot){if(!pRoot)return -1;int left_len = 0;int right_len = 0;int max_len = 0;return LongestPathRecursive(pRoot,left_len,right_len,max_len);}
0 0
- 二叉树中相距最远的两个节点之间的距离
- 二叉树中相距最远的两个节点之间的距离
- 二叉树中相距最远的两个节点之间的距离
- 求二叉树中节点的最大距离 即二叉树中相距最远的两个节点之间的距离
- 二叉树的两个节点之间最远的距离
- 求一颗二叉树中最远的两个节点的距离
- 求二叉树中最远的两个节点的距离
- 求二叉树中最远的两个节点的距离
- ~求二叉树中最远的两个节点的距离~
- 求二叉树中最远的两个节点的距离
- 求二叉树中两个节点最远的距离
- 二叉树中最远两个节点的距离
- 二叉树系列——二叉树的最大距离(即相距最远的两个叶子节点,编程之美,百度面试题)
- 在二叉树中,距离最远的两个节点的距离
- 在二叉树中,找到距离最远的两个节点的距离
- 在二叉树中,找到距离最远的两个节点的距离
- Java实现:在二叉树中,求距离最远的两个节点的距离
- 查找二叉树最远两个节点的距离
- 2015年10月--学院招聘会--有感
- hdoj--1248--寒冰王座(完全背包)
- 2012年蓝盾杯信息安全竞赛小记
- CSS专题之浮动
- 多样式cell排列使用
- 二叉树中相距最远的两个节点之间的距离
- Qt官方开发环境生成的exe发布方式--使用windeployqt
- 最小生成树
- ISCC2012信息安全对抗竞赛题目分析
- 《Android开发技术周报》笔记
- 控制kobuki底盘(一)
- Oracle OS认证与口令文件认证详解
- angular-file-upload 中文API
- dispatch_barrier_async的作用是什么?