我已经创建了二叉树和链表类,我只是需要一个只打印最大路径节点的算法。二叉树的高度和大小已经存储在根节点中,但是我的问题是在将每个节点添加到链接列表时只遍历最大的路径。
tf7tbtn21#
我假设你的二叉树节点引用了它们的父节点,对吗?然后可以使用广度优先搜索或深度优先搜索,并查找深度等于最大深度的根节点。一旦你找到一个这样的节点,然后从那里继续父节点的踪迹,并将每个节点添加到你的链表中。当您到达顶部时,链表将包含最大路径的所有节点。此算法如下所示:从二叉树的根开始使用宽度优先或深度优先搜索到达叶节点(没有任何子节点的节点)到达叶节点时,请检查其深度:如果它不等于最大深度,则忽略它并继续搜索如果它等于最大深度,那么您就找到了最大路径的结束节点(可能有多条路径,但此时区分它们似乎并不重要)。转到下一步将此叶节点添加到链接列表,然后转到其父节点重复最后一步,直到到达根节点,并且没有父节点-然后您的链表具有最长路径的所有节点。请注意,节点的顺序是从叶节点到根节点-如果需要反转,可以在最后一步之后进行。
vnzz0bqm2#
我们制作一个二叉树数据结构,用一些虚拟数据填充它,用深度或广度优先搜索遍历树,并构造最长路径中节点的链表。网上有很多伪代码和更多信息:http://en.wikipedia.org/wiki/binary_treehttp://en.wikipedia.org/wiki/linked_listhttp://en.wikipedia.org/wiki/breadth-first_searchhttp://en.wikipedia.org/wiki/depth-first_search我假设您已经了解java,并且没有完全从头开始?如果您正在与java作斗争,那么objects first with java是一本很棒的书,而且算法简介似乎是关于算法的标准书,可能很值得一看。
2条答案
按热度按时间tf7tbtn21#
我假设你的二叉树节点引用了它们的父节点,对吗?然后可以使用广度优先搜索或深度优先搜索,并查找深度等于最大深度的根节点。一旦你找到一个这样的节点,然后从那里继续父节点的踪迹,并将每个节点添加到你的链表中。当您到达顶部时,链表将包含最大路径的所有节点。
此算法如下所示:
从二叉树的根开始
使用宽度优先或深度优先搜索到达叶节点(没有任何子节点的节点)
到达叶节点时,请检查其深度:
如果它不等于最大深度,则忽略它并继续搜索
如果它等于最大深度,那么您就找到了最大路径的结束节点(可能有多条路径,但此时区分它们似乎并不重要)。转到下一步
将此叶节点添加到链接列表,然后转到其父节点
重复最后一步,直到到达根节点,并且没有父节点-然后您的链表具有最长路径的所有节点。
请注意,节点的顺序是从叶节点到根节点-如果需要反转,可以在最后一步之后进行。
vnzz0bqm2#
我们制作一个二叉树数据结构,用一些虚拟数据填充它,用深度或广度优先搜索遍历树,并构造最长路径中节点的链表。
网上有很多伪代码和更多信息:
http://en.wikipedia.org/wiki/binary_tree
http://en.wikipedia.org/wiki/linked_list
http://en.wikipedia.org/wiki/breadth-first_search
http://en.wikipedia.org/wiki/depth-first_search
我假设您已经了解java,并且没有完全从头开始?
如果您正在与java作斗争,那么objects first with java是一本很棒的书,而且算法简介似乎是关于算法的标准书,可能很值得一看。