面试过程中,问的最多的题目大致是可以分为两类的,一类是链表,另一类就是二叉树了,树(普通数)和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>*);  /*二叉搜索树的下一个节点*/
};

面试题目集锦--二叉树相关推荐

  1. BAT等公司高薪招聘Android开发面试题目集锦

    整理过的50道面试题目 1.listView的优化方式 重用convertView viewHolder static class viewHolder 在列表里面有图片的情况下,监听滑动不加载图片 ...

  2. 面试题目集锦--链表

    前段时间一直在忙着找工作,在面试中也遇到了大量的算法题目,其中,问的比较多的是二叉树和链表之类的题目,在这里,我就把前段时间写的链表面试题贴出来,当然,由于题目很多,我只是在这里贴出它的类构造,不贴出 ...

  3. 转-python面试题目集锦(100道部分附答案)

    Python爬虫人工智能教程:www.python88.cn 编程资源网:www.python66.cn 最近收集整理了100道python真实面试笔试题,并自己做了一些,希望能帮助大家,顺利早日找到 ...

  4. 面试题目集锦 -- 排序算法

          面试过程中,免不了会问一些比较基础的问题,而这些基础的问题肯定要说到排序上去.       我们知道,排序算法包含插入,选择,冒泡,快速,归并,堆排序等等,大多时候,我们在面试的时候,最常 ...

  5. JavaScript面试题目集锦

    这里是我到处搜集的一些JS题目,看起来比较简单,但对基础知识的考察还是很到位的. 有一些还可能是面试题. 题目的分析肯定会有不足的地方 ,如果能指正出来的话就再好不过了.不断更新中-- 这里还有几个前 ...

  6. JAVA高频面试题目集锦

    一.equals()和==,以及HashCode() =号 如果是值引用,比较值是否相等: 如果是对象引用,比较对象内存地址是否相同 equals()方法中,默认使用等号,如果说我们想要判断对象是否相 ...

  7. C/C++面试题目集锦

    1.指针与引用的区别 从四个方面出发考虑不同点 (1)从定义出发,指针是一个变量,所存内容为指向变量在内存中的存储地址:而引用只是原变量的一个别名,和原变量占同一个存储单元. (2)初始化:指针可以初 ...

  8. 软件测试笔试、面试题目集锦

    一.单选题 1.软件测试是软件质量保证的重要手段,下述哪种测试是软件测试的最基础环节?(B)  A.集成测试 B.单元测试 C.目的测试 D.确认测试 单元测试是对最小可测试单元的检查和验证 2.测试 ...

  9. 2020社招前端VUE面试题目

    2020前端VUE面试题目集锦 年初由于疫情影响导致上家公司不景气,也由于自己一系列的考虑决定裸辞找工作,面试了十多家公司,最终进入了比较心仪的公司,我将这段时间面试所遇见的和VUE先关题目大概做个整 ...

最新文章

  1. vs2008常用操作汇总
  2. __call__ 可调用对象
  3. 电气:6机30节点经济调度(考虑负荷平衡、线路容量、斜坡约束)代码实现
  4. linux kernel基本构成的内容有下列哪些项_Linux_GUI加速(2)_Linux中的DRM-KMS分析
  5. Spring quartz 并发性研究
  6. FFmpeg过滤器框架分析
  7. StackOverflow热帖:Java整数相加溢出怎么办?Java8一步搞定~
  8. 关键词词云怎么做_如何生成关键词云图?
  9. 苏州珠宝玉石展览教您鉴别方法
  10. 电脑扬声器安装程序(UNKNOW)
  11. Matlab绘制跳动的心
  12. Ibeacon一维小项目
  13. 参考文献中英文人名_英文人名的缩写和参考文献写法
  14. 百度、阿里、腾讯、华为和移动等常用网盘免费空间与性价比
  15. Android studio中todo的用法
  16. 中e管家12个理财实用技巧
  17. 如何设置Qt程序软件的语言翻译(Qt自带翻译软件)
  18. 有限布尔代数的表示理论:由集合生成的布尔代数
  19. python 电路仿真spice_控制电路的SPICE仿真模型
  20. 程序员要不要考公务员

热门文章

  1. 【推荐】ZendStudio 5.5.1 开发调试(Debug)配置说明
  2. 创建 桌面、发送到...、快速启动栏、开始菜单、程序菜单、右键菜单 快捷方式...
  3. A 元素[HTML 4.01]
  4. 基于消息机制的万能框架
  5. BigDecimalf大小的比较
  6. linux wc命令参数及用法详解
  7. 腾讯云服务器配置JDK和Tomcat环境
  8. 最新网众 2490(XP) 客户端 去百度 去劫持 去快车
  9. 学会用core dump调试程序错误(转)
  10. Visual C#创建Windows服务程序