二叉树的相关面试题<二>
2016-12-29 20:29
337 查看
1.求二叉树中最远的两个节点的
思路:解这个题的思路是用递归求解,定义一个变量distance,后序遍历,从叶子节点开始判断。对于当前节点,求他的左右子树的高度和 和distance比较,如果高度和大,把他保存到变量distance中,否则distance不变 。
如图:
![](http://img.blog.csdn.net/20161229202554538?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcWluZ2N1bnN1aXl1ZQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2.求两个节点最近的公共祖先
思路:解这个题的思路是用递归求解,定义一个变量distance,后序遍历,从叶子节点开始判断。对于当前节点,求他的左右子树的高度和 和distance比较,如果高度和大,把他保存到变量distance中,否则distance不变 。
如图:
int GetFarthestDistance() { assert(_root); int distance=0; //记录最远的距离 return _GetFarthestDistance(_root,distance); }
int _GetFarthestDistance(Node* root,int& distance) { if(root==NULL) return 0; //后序遍历 int left=_GetFarthestDistance(root->_left ,distance); int right=_GetFarthestDistance(root->_right ,distance); if(left+right>distance) //更新distance distance=left+right; return left>right?left+1:right+1; }
2.求两个节点最近的公共祖先
Node* GetRecentlyAncestor(int root1,int root2) { stack<Node*> v1; //保存到root1路径 stack<Node*> v2; //保存到root2路径 int flag=0; //判断有没有找到 _GetRecentlyAncestor(_root,root1,v1,flag); flag=0; _GetRecentlyAncestor(_root,root2,v2,flag); Node* top1=v1.top (); Node* top2=v2.top (); Node* prev=top1; //最近的公共祖先就是在路径中第一不相等的数的前一个 while((!v1.empty())&&(!v2.empty())) { if(top1==top2) { prev=top1; v1.pop(); if(!v1.empty ()) top1=v1.top(); v2.pop(); if(!v2.empty ()) top2=v2.top(); } else { return prev; } } if(v1.empty()||v2.empty ()) { return prev; } }
void _GetRecentlyAncestor(Node* root,int rootData,stack<Node*>& v,int& flag) { if(root==NULL||flag==1)//||flag==1是为了表示找到的节点在最子树,不用去访问右子树了 return; //后序遍历 _GetRecentlyAncestor(root->_left ,rootData,v,flag); _GetRecentlyAncestor(root->_right,rootData,v,flag); //当前节点 if(root->_data ==rootData||flag==1) //||flag==1是为了表示找到的节点再当前的子树中 { v.push(root); flag=1; } }
相关文章推荐
- 二叉树相关的面试题<一>
- 二叉树的相关面试题 <三>---------二叉树的镜像
- 二叉树的相关面试题<三>-----二叉树中和为某一的路径
- java攻城狮面试题<二>
- u-boot串口和stdio、console初始化及相关操作详解<二>
- 二叉树的建立和基础操作<二> —— (层次遍历和计算二叉树的宽度)
- SharePoint 2013 托管导航及相关配置 <二>
- <剑指offer 面试题8>二叉树的下一个节点(Java)
- SharePoint 2013 托管导航及相关配置 <二>
- 2011年.NET面试题总结---献给即将找工作的同行们<二>
- 面试题<二>
- u-boot串口和stdio、console初始化及相关操作详解<二>
- AD+EXCHANGE邮件服务器的迁移实战<二>
- 关于<script src="*.asp"></script>的相关说明
- BackupPC部署<二>
- 获取Windows Shell的简单示例程序<二>
- HtmlUnit学习<二>
- WUSU完整部署<二>
- flex<二>
- BXP_4.1安装配置及域应用随记<二> 推荐