面试题目集锦--二叉树
面试过程中,问的最多的题目大致是可以分为两类的,一类是链表,另一类就是二叉树了,树(普通数)和B(+-)树由于稍难些,问的不是很多。
往往在问到二叉树的时候,一般都是用递归的解法,然后现场写代码。
这里,还是像上一篇文章一样,我对许多二叉树的算法进行了总结,需要下载的朋友可以去这里免积分下载:
http://download.csdn.net/detail/dlutbrucezhang/8066557
也是像上一篇文章一样,这里我贴出二叉树代码类:
template <typename T>
class dutBinNode
{
public :T data;dutBinNode<T>* lChild;dutBinNode<T>* rChild;
};template <typename T>
class dutBinTree
{
private :dutBinNode<T>* pRoot;protected : /*包裹函数*/void dutDeleteBinTree(dutBinNode<T>*); /*销毁二叉树*/void dutCreateBinTree(dutBinNode<T>**); /*创建二叉树*/void dutRecursionPreOrder(dutBinNode<T>*); /*递归前序遍历*/void dutRecursionInOrder(dutBinNode<T>*); /*递归中序遍历*/void dutRecursionPostOrder(dutBinNode<T>*); /*递归后序遍历*/void dutNotRecursionPreOrder(dutBinNode<T>*); /*非递归前序遍历*/void dutNotRecursionInOrder(dutBinNode<T>*); /*非递归中序遍历*/void dutNotRecursionPostOrder(dutBinNode<T>*); /*非递归后序遍历*/void dutLevelTraverseNoBranch(dutBinNode<T>*); /*不分行层次遍历*/void dutLevelTraverseHasBranch(dutBinNode<T>*); /*分行层次遍历*/void dutDepthFirstSearch(dutBinNode<T>*); /*深度优先遍历*/void dutBreadthFirstSearch(dutBinNode<T>*); /*广度优先遍历*/int dutDepthOfTree(dutBinNode<T>*); /*树的高度*/int dutNodeCountOfTree(dutBinNode<T>*); /*树中节点个数*/int dutLeafNodeCountOfTree(dutBinNode<T>*); /*树中叶子节点个数*/int dutNodeCountInLevelK(dutBinNode<T>*, int); /*第k层节点个数*/int dutPrintNodeInLevelK(dutBinNode<T>*, int); /*打印第K层节点*/bool dutIsBalanceBinTree(dutBinNode<T>*, int&); /*是否是平衡二叉树*/bool dutIsCompleteBinTree(dutBinNode<T>*); /*是否是完全二叉树*//*判断是否是子树*/bool dutDoesTree1HaveTree2(dutBinNode<T>*, dutBinNode<T>*);bool dutIsTreeHasSubTree(dutBinNode<T>*, dutBinNode<T>*);void dutNotRecursionTreeMirroring(dutBinNode<T>*); /*非递归树的镜像*/void dutRecursionTreeMirroring(dutBinNode<T>*); /*递归树的镜像*//*寻找和为某一值的路径*/void dutFindPathEqualSum(dutBinNode<T>*, int, std :: vector<int>&, int);/*二叉搜索树转换为双向链表*/dutBinNode<T>* dutCluesBinTreeConvertToDoubleList(dutBinNode<T>*, dutBinNode<T>* &);/*递归树中两个节点的最低公共祖先*/dutBinNode<T>* dutRecursionGetLastCommonParent(dutBinNode<T>* ,dutBinNode<T>*, dutBinNode<T>*);/*非递归树中两个节点的最低公共祖先*///bool dutNotRecursionGetLastCommonParent(dutBinNode<T>* ,dutBinNode<T>*, std :: vector<dutBinNode<T>*>&);bool dutCmpStructOfTree(dutBinNode<T>*, dutBinNode<T>*); /*判断两棵树的结构是否相同,不考虑元素*/bool dutCmpTreeIsEqual(dutBinNode<T>*, dutBinNode<T>*); /*判断两棵树是否相同,考虑元素*/int dutMaxDistBetweenNodes(dutBinNode<T>*, int&); /*二叉树中节点间的最大距离*/dutBinNode<T>* dutMinNodeInCluseBinTree(dutBinNode<T>*); /*二叉排序树中寻找最小值节点*/dutBinNode<T>* dutMaxNodeInCluseBinTree(dutBinNode<T>*); /*二叉排序树中寻找最大值节点*/dutBinNode<T>* dutFindNearestBigNode(dutBinNode<T>*, T _data); /*距离data最近且大于data的节点*/dutBinNode<T>* dutFindNearestSmallNode(dutBinNode<T>*, T _data); /*距离data最近且小于data的节点*/ public :dutBinTree<T>() : pRoot(NULL) {}~dutBinTree<T>();void dutCreateBinTree(); /*创建二叉树*/void dutRecursionPreOrder(); /*递归前序遍历*/void dutRecursionInOrder(); /*递归中序遍历*/void dutRecursionPostOrder(); /*递归后序遍历*/void dutNotRecursionPreOrder(); /*非递归前序遍历*/void dutNotRecursionInOrder(); /*非递归中序遍历*/void dutNotRecursionPostOrder(); /*非递归后序遍历*/void dutLevelTraverseNoBranch(); /*不分行层次遍历*/void dutLevelTraverseHasBranch(); /*分行层次遍历*/void dutDepthFirstSearch(); /*深度优先遍历*/void dutBreadthFirstSearch(); /*广度优先遍历*//*algorithm*/int dutDepthOfTree(); /*树的高度*/int dutNodeCountOfTree(); /*树中节点个数*/int dutLeafNodeCountOfTree(); /*树中叶子节点个数*/int dutNodeCountInLevelK(int); /*第k层节点个数*/int dutPrintNodeInLevelK(int); /*打印第K层节点*/bool dutIsBalanceBinTree(); /*是否是平衡二叉树*/bool dutIsCompleteBinTree(); /*是否是完全二叉树*/bool dutIsTreeHasSubTree(dutBinTree<T>); /*判断是否是子树*/void dutNotRecursionTreeMirroring(); /*非递归树的镜像*/void dutRecursionTreeMirroring(); /*递归树的镜像*/void dutFindPathEqualSum(int, std :: vector<int>&); /*寻找和为某一值的路径*/dutBinNode<T>* dutCluesBinTreeConvertToDoubleList(); /*二叉搜索树转换为双向链表(破坏了封装)*/dutBinNode<T>* dutBinFindInBinSearchTree(int); /*二分查找树中寻找一个数(破坏了封装)*//*递归树中两个节点的最低公共祖先(破坏了封装)*/dutBinNode<T>* dutRecursionGetLastCommonParent(dutBinNode<T>*, dutBinNode<T>*);/*非递归树中两个节点的最低公共祖先(破坏了封装)*///dutBinNode<T>* dutNotRecursionGetLastCommonParent(dutBinNode<T>*, dutBinNode<T>*);bool dutCmpStructOfTree(dutBinTree<T>); /*判断两棵树的结构是否相同,不考虑元素*/bool dutCmpTreeIsEqual(dutBinTree<T>); /*判断两棵树是否相同,考虑元素*/int dutMaxDistBetweenNodes(); /*二叉树中节点间的最大距离*//*破坏了封装*/dutBinNode<T>* dutMinNodeInCluseBinTree(); /*二叉排序树中寻找最小值节点*/dutBinNode<T>* dutMaxNodeInCluseBinTree(); /*二叉排序树中寻找最大值节点*/dutBinNode<T>* dutFindNearestBigNode(T _data); /*距离data最近且大于data的节点*/dutBinNode<T>* dutFindNearestSmallNode(T _data); /*距离data最近且小于data的节点*/dutBinNode<T>* dutFindNextNodeInClueBinTree(dutBinNode<T>*); /*二叉搜索树的下一个节点*/
};
面试题目集锦--二叉树相关推荐
- BAT等公司高薪招聘Android开发面试题目集锦
整理过的50道面试题目 1.listView的优化方式 重用convertView viewHolder static class viewHolder 在列表里面有图片的情况下,监听滑动不加载图片 ...
- 面试题目集锦--链表
前段时间一直在忙着找工作,在面试中也遇到了大量的算法题目,其中,问的比较多的是二叉树和链表之类的题目,在这里,我就把前段时间写的链表面试题贴出来,当然,由于题目很多,我只是在这里贴出它的类构造,不贴出 ...
- 转-python面试题目集锦(100道部分附答案)
Python爬虫人工智能教程:www.python88.cn 编程资源网:www.python66.cn 最近收集整理了100道python真实面试笔试题,并自己做了一些,希望能帮助大家,顺利早日找到 ...
- 面试题目集锦 -- 排序算法
面试过程中,免不了会问一些比较基础的问题,而这些基础的问题肯定要说到排序上去. 我们知道,排序算法包含插入,选择,冒泡,快速,归并,堆排序等等,大多时候,我们在面试的时候,最常 ...
- JavaScript面试题目集锦
这里是我到处搜集的一些JS题目,看起来比较简单,但对基础知识的考察还是很到位的. 有一些还可能是面试题. 题目的分析肯定会有不足的地方 ,如果能指正出来的话就再好不过了.不断更新中-- 这里还有几个前 ...
- JAVA高频面试题目集锦
一.equals()和==,以及HashCode() =号 如果是值引用,比较值是否相等: 如果是对象引用,比较对象内存地址是否相同 equals()方法中,默认使用等号,如果说我们想要判断对象是否相 ...
- C/C++面试题目集锦
1.指针与引用的区别 从四个方面出发考虑不同点 (1)从定义出发,指针是一个变量,所存内容为指向变量在内存中的存储地址:而引用只是原变量的一个别名,和原变量占同一个存储单元. (2)初始化:指针可以初 ...
- 软件测试笔试、面试题目集锦
一.单选题 1.软件测试是软件质量保证的重要手段,下述哪种测试是软件测试的最基础环节?(B) A.集成测试 B.单元测试 C.目的测试 D.确认测试 单元测试是对最小可测试单元的检查和验证 2.测试 ...
- 2020社招前端VUE面试题目
2020前端VUE面试题目集锦 年初由于疫情影响导致上家公司不景气,也由于自己一系列的考虑决定裸辞找工作,面试了十多家公司,最终进入了比较心仪的公司,我将这段时间面试所遇见的和VUE先关题目大概做个整 ...
最新文章
- vs2008常用操作汇总
- __call__ 可调用对象
- 电气:6机30节点经济调度(考虑负荷平衡、线路容量、斜坡约束)代码实现
- linux kernel基本构成的内容有下列哪些项_Linux_GUI加速(2)_Linux中的DRM-KMS分析
- Spring quartz 并发性研究
- FFmpeg过滤器框架分析
- StackOverflow热帖:Java整数相加溢出怎么办?Java8一步搞定~
- 关键词词云怎么做_如何生成关键词云图?
- 苏州珠宝玉石展览教您鉴别方法
- 电脑扬声器安装程序(UNKNOW)
- Matlab绘制跳动的心
- Ibeacon一维小项目
- 参考文献中英文人名_英文人名的缩写和参考文献写法
- 百度、阿里、腾讯、华为和移动等常用网盘免费空间与性价比
- Android studio中todo的用法
- 中e管家12个理财实用技巧
- 如何设置Qt程序软件的语言翻译(Qt自带翻译软件)
- 有限布尔代数的表示理论:由集合生成的布尔代数
- python 电路仿真spice_控制电路的SPICE仿真模型
- 程序员要不要考公务员
热门文章
- 【推荐】ZendStudio 5.5.1 开发调试(Debug)配置说明
- 创建 桌面、发送到...、快速启动栏、开始菜单、程序菜单、右键菜单 快捷方式...
- A 元素[HTML 4.01]
- 基于消息机制的万能框架
- BigDecimalf大小的比较
- linux wc命令参数及用法详解
- 腾讯云服务器配置JDK和Tomcat环境
- 最新网众 2490(XP) 客户端 去百度 去劫持 去快车
- 学会用core dump调试程序错误(转)
- Visual C#创建Windows服务程序