当前位置: 首页 > news >正文

面试题:遍历三颗相连的满二叉树

题目:三颗满二叉树,他们的根节点互为父节点,从任意节点遍历整颗二叉树

        要求:不能使用外部变量、集合等

                   不能改变树结构

                   不能 给节点添加额外属性

ps: 屁事真多 

思路:一颗没毛病,就前序遍历就OK, 三颗也一样,但是要考虑到遍历根节点时死循环问题,方式为:如果一个节点是根节点,则设置标识, 并且只记录第一次碰到的的根节点, 还有一点,递归时要传过去当前节点,防止重复遍历

  1.  打印
  2. 遍历头
  3. 遍历左孩子
  4. 遍历右孩子
static class Node<E> {E v;Node<E> left;Node<E> right;Node<E> head;public Node(E v) {this.v = v;}
}/*** @param node* @param sourceNode 遍历到node节点的节点* @param firstRootNode 第一次碰到的根节点*/
private static void threeTreeTraversal(Node<Integer> node, Node<Integer> sourceNode, Node<Integer> firstRootNode) {if (null == node) {return;}// 先打印本节点值System.out.print(node.v + " ");// 如果一个节点是根节点,则设置标识,方式root节点之间死循环, 并且只记录第一次的根节点if (isRoot(node) && null == firstRootNode) {firstRootNode = node;}if (node.head != sourceNode && node.head != firstRootNode) {// 遍历头节点threeTreeTraversal(node.head, node, firstRootNode);}if (node.left != sourceNode) {// 遍历左子树threeTreeTraversal(node.left, node, firstRootNode);}if (node.right != sourceNode) {// 遍历右子树threeTreeTraversal(node.right, node, firstRootNode);}
}public static boolean isRoot(Node<Integer> node) {Node<Integer> parent = node.head;if (parent.left == node || parent.right == node) {return false;}return true;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • OpenCV(第二关--读取图片和摄像头)实例+代码
  • 探索贪心算法:解决优化问题的高效策略
  • selenium(二)基于java、元素操控、Frame切换、元素等待
  • 【Go语言基础】调度器模型GPM与垃圾回收器GC
  • GNU/Linux - RSYSLOG
  • 基于大数据分析景区消费行为影响因素研究【消费等级预测、携程,去哪网数据抓取】
  • 去雾去雨算法
  • 力扣top300:1.两数之和
  • 37-RPC HTTP区别是什么
  • 用于目标说话人提取的统一视听线索
  • CSS3 3D 转换
  • GPT-6曝光!阉割版「草莓」秋季兑现
  • qtcreator的vim模式下commit快捷键ctrl+g,ctrl+c没有反应的问题
  • labelImg使用
  • 基于网络技术的天气数据查询
  • download使用浅析
  • ECMAScript入门(七)--Module语法
  • java取消线程实例
  • KMP算法及优化
  • React as a UI Runtime(五、列表)
  • Vue 2.3、2.4 知识点小结
  • 创建一种深思熟虑的文化
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 数组的操作
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 项目实战-Api的解决方案
  • 一、python与pycharm的安装
  • 一文看透浏览器架构
  • Spring第一个helloWorld
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • ​经​纬​恒​润​二​面​​三​七​互​娱​一​面​​元​象​二​面​
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #### golang中【堆】的使用及底层 ####
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (SpringBoot)第七章:SpringBoot日志文件
  • (二)延时任务篇——通过redis的key监听,实现延迟任务实战
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (六)Hibernate的二级缓存
  • (论文阅读11/100)Fast R-CNN
  • (三)SvelteKit教程:layout 文件
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)创业家杂志:UCWEB天使第一步
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • **python多态
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .net dataexcel winform控件 更新 日志
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .Net(C#)自定义WinForm控件之小结篇
  • .net和php怎么连接,php和apache之间如何连接
  • .NET开发者必备的11款免费工具