二叉树常见面试题 _第1页
二叉树常见面试题 _第2页
二叉树常见面试题 _第3页
二叉树常见面试题 _第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 / 4 二叉树常见面试题 二叉树面试题 面试中,最常见是数据结构就是二叉树和链表了,其中和二叉树有关的常见面试题主要是:树的前序遍历、中序遍历、后序遍历、分层遍历、树的节点数、树的叶子节点数、树的第 K 层节点数、树的深度、树的宽度、平衡二叉树的判定、完全二叉树的判定、满二叉树的判定、由前序中序反推后序遍历、由前序中序重建二叉树,处理这些问题基本思想无外乎是 “ 遍历 +递归 ” 。 关于树的遍历,递归方式太傻太天真,但也是最基本的思想,实现代码网上资料可谓是汗牛充栋,在此就不赘述了。 下面仅列举了非递归实现树的前序、中序以及后序遍历,由于笔者对代码有洁癖,最不能忍受一个 环里再嵌套另外一个 环(网上千篇一律的实现代码方式),虽然二者的思想都是一致的,但笔者的实现方式更为直观易懂,故此处的版本都只借助一个栈、一个 前序非递归遍历: t)s;t);)p = ();p);if(p-p-if(p-p-2 / 4 中序非递归遍历: t)s;p=t;p|!)if(p)p);p=p-p = ();p);p=p-前序和中序的非递归遍历都很好理解,我就不再浪费口舌笔墨了,要是真看不懂,请回去把严蔚敏那本数据结构再啃一遍、两遍、三遍 要是还看不懂,我只能怀着无比沉重的心情告诉你一个非常不幸的消息: “ 对不起,你不适合这个行业! ” 后序非递归遍历:后序非递归遍历稍微比较难理解些,但是你如果对前序和中序遍历思想已经融会贯通了,其实也就那样: 从根节点开始,只要当前节点存在,或者栈不为空,则重复下面操作: (1)从当前节点开始,进栈并走左子树,直到左子树为空。 (2)如果栈顶节点的右子树为空,或者栈顶节点的右孩子为刚访问过的节点, 则退栈并访问,然后置当前节点指针为空。 (3)否则走右子树。 t) / 4 s;p=t;q=p|!)if(p)p);p=p-p = ();if(p-| p-q)p);q = p;p = p=p-还有一种网上流传的后序遍历的方式是借助于两个栈,一个栈用来遍历,另一个栈保存遍历到的结点,最后一起出栈,就是后序遍历结果。 t) p=if(t=t); ) p=(); ; p); if(p-p- if(p-p- ) p=(); ; p); 分层遍历:通过分层遍历可实现统计树的深度、每一层节点数、树的最大宽度等要求。基本解法想必你也知道了,就是借助一个队列,进行入队、出队操作,如下面的二叉树,要是一口气全部打印所有节点,即输出: 1 2 3 4 5 6 7。 再进一步考察,如何实现将二叉树按层打印,即每一4 / 4 行打印二叉树的每一层树节点,输出为: 12 34 5 67 1 / 2 3 / 4 5 6 / 7 这就需要再基本的分层遍历基础上再做些手脚了,下面是一个简单的例子: /分层打印节点,每一行为一层,返回该二叉树的层数 t)if(t=;v;t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论