题目:

You are given a binary tree with unique integer values on each node. However, the child pointers on each node may point to any other node in the tree including itself, introducing cycles into the binary tree. A cycle is defined when you can traverse back to the same node by following its descendants. Write a function that takes in the root node of the tree and prints out the cycles, if any, in the binary tree. The only operations available on each node are node.left (returns another Node or null), node.right, and node.value (returns the integer value of the node). Pseudocode is fine.

即找出有向图中的环(loop或者cycle),而且所有打印出来。

Example: http://i.imgur.com/7S5fZe5.png

cycles: [1, 2, 4], [5], [3,6]

解答:

import java.util.ArrayList;public class Graph {enum VertexState {White, Gray, Black}public static void main(String[] args) {Node node = new Node(0);node.color = VertexState.White;Node left = new Node(1);left.color = VertexState.White;node.left = left;Node right = new Node(2);right.color = VertexState.White;Node rightright = new Node(3);       node.right = right;left.left = node;right.right = rightright;rightright.right = node;ArrayList<Node> list = new ArrayList<Node>();ArrayList<ArrayList<Node>> ret = new ArrayList<ArrayList<Node>>();rec(node, list, ret);System.out.println(ret);}public static void rec(Node node, ArrayList<Node> list, ArrayList<ArrayList<Node>> ret) {if(node.color == VertexState.Gray) {ret.add(new ArrayList<Node>(list));return;}node.color = VertexState.Gray;list.add(node);if(node.left != null && node.left.color != VertexState.Black) {rec(node.left, list, ret);}if(node.right != null && node.right.color != VertexState.Black) {rec(node.right, list, ret);}list.remove(list.size()-1);node.color = VertexState.Black;}public static class Node {int val;Node left;Node right;VertexState  color;public Node(int val_) {val = val_;}@Overridepublic String toString() {return this.val + "";}}
}

Tree Operations 打印出有向图中的环相关推荐

  1. 算法期中1007. 怪兽训练 (找出有向图中所有的强连通分量的Kosaraju算法)

    Description 贝爷的人生乐趣之一就是约战马会长. 他知道马会长喜欢和怪兽对决,于是他训练了N只怪兽,并对怪兽用0到N-1的整数进行编号. 贝爷训练怪兽的方式是让它们一对一互殴. 两只怪兽互殴 ...

  2. python找出有向图的所有环,Python:有向图中的所有简单路径

    我正在处理一个(数量)有向图,其中有no个循环,我需要找到任意两个节点之间的所有简单路径.一般来说,我不会担心执行时间,但我必须在非常多的时间步中对很多节点执行此操作-我正在处理基于时间的模拟.在 我 ...

  3. 如何快递打印出微信中的链接文章

    微信现在不仅仅是一种社交工具,更多的的时候也会被当做一个办公工具使用,使用微信可以发送一些工作方面比较重要的信息,同时还可以转发一些文章链接,对于微信接收的这些文章链接,如何可以快速的打印出来呢? 如 ...

  4. c++怎么打印出句子中的各个单词_小学英语单词汇总篇 身体 食品、饮料 蔬菜...

    身体英语名称 hair头发 head头 eye眼睛 face脸 neck脖子 arm手臂 leg腿 hand手 foot脚 toe脚趾 finger手指 ear耳朵 nose鼻子 mouth嘴巴 to ...

  5. 找出数组中两数之和为指定值的所有整数对

    一,问题描述 给定一个整型数组(数组中的元素可重复),以及一个指定的值.打印出数组中两数之和为指定值的 所有整数对 二,算法分析 一共有两种方法来求解.方法一借助排序,方法二采用HashSet 方法一 ...

  6. 用拓扑排序检测有向图中是否有环

    目录 算法主要步骤 代码 测试数据 提示:由于拓扑排序的检测方式不涉及到边权或点权,所以拓扑序列中的正环和负环都能够被检测出来.检测可达负环可以用Bellman-Ford或者SPFA. 算法主要步骤 ...

  7. 打印出所有的 info.plist 中的 keys、values

    打印出所有的 info.plist 中的 keys.values // get all keys and values in info.plist NSBundle* mainBundle = [NS ...

  8. Java1.使用二分搜索算法查找任意N个有序数列中的指定元素。 2.通过上机实验进行算法实现。 3.保存和打印出程序的运行结果,并结合程序进行分析,上交实验报告。 4.至少使用两种方法进行编程,直接查

    1.使用二分搜索算法查找任意N个有序数列中的指定元素. 2.通过上机实验进行算法实现. 3.保存和打印出程序的运行结果,并结合程序进行分析,上交实验报告. 4.至少使用两种方法进行编程,直接查找/递归 ...

  9. 判断图有无环_判断无向图/有向图中是否存在环

    本文主要针对如何判断有向图/无向图中是否存在环的问题进行简单的论述. 一 无向图 1.利用DFS进行判断 利用DFS判断有向图是否存在环,是最为常用的一种方法,虽然这种方法很常用,但可参考的代码的实现 ...

最新文章

  1. PowerShell的开源实现
  2. ZeroClipboard跨浏览器复制粘贴
  3. 预习一下计算机网络分类,计算机网络实验预习报告1
  4. 交通银行软件中心编制_国家标准研究项目区块链服务技术安全要求编制启动会顺利召开...
  5. linux 函数 增加用户,linux常用c函数用户组有哪些?
  6. python导入csv报错_Python Pandas read_csv报错
  7. 手势相关-解决手势冲突
  8. [转]CTO谈豆瓣网和校内网技术架构变迁
  9. 爬虫学习2----Pyquery
  10. 微软 smtp 服务器,配置 SMTP 服务器
  11. 软件测试周刊(第32期):沙漠中藏着一口井
  12. Nginx + passenger安装
  13. 让制作APP变成搭积木
  14. Webview 打开qq聊天窗口,申请进群
  15. 如何看懂Elastic解决方案与Gartner的魔力象限
  16. 对于计算机网络的感想,计算机网络实习心得
  17. (整理)HTML字体标记:标题字体,字体大小,物理字体,逻辑字体,字体颜色,客户端字体,字符实体
  18. Java基础05-面向对象private\this\static关键字
  19. 【软件工具】之磁盘格式 FAT32、exFAT、NTFS
  20. 充电宝买啥牌子?便宜好用的充电宝品牌推荐

热门文章

  1. python中string的操作函数
  2. 贷还是不贷:如何用Python和机器学习帮你决策?
  3. HashMap实现原理
  4. Android与H5交互
  5. Spring源代码解析(收藏)
  6. 关于PHP的curl开启问题 (转)
  7. 利用List比较数组有优势吗?
  8. Windows 7 搭建 Mobile 6 真机调试开发环境
  9. LINUX下面NetworkManager和network冲突的问题
  10. 参数binlog_row_image设置MINIMAL,你今天被坑了吗?