【发布时间】:2018-11-15 14:16:25
【问题描述】:
基本上我想写一个函数,给定一个决策树,打印树中所有可能的路径,并且对于每个可能的路径,还打印一个布尔值列表(真或假),指示它是否离开(true) 或 right(false) 在树中。
这是我的树类型:
public class Tree {
private TreeNode root;
private static class TreeNode {
private Pair<String, Float> data;
private TreeNode leftNode;
private TreeNode rightNode;
private TreeNode( Pair<String, Float> data, TreeNode left, TreeNode right) {
this.data = data;
this.leftNode = left;
this. rightNode = right;
}
}
}
这是我到目前为止所做的事情:
private void getTreePaths(TreeNode r, List<Pair<String, Float>> list,
List<String> flags) {
if (r == null)
return;
// adds the node to the list
list.add(r.data);
// goes left
if (r.leftNode != null) {
//went left
flags.add("true");
getTreePaths(r.leftNode, new ArrayList<Pair<String, Float>>(list), flags);
}
//instead goes right
else if (r.rightNode != null) {
//went right
flags.add("false");
getTreePaths(r.rightNode, new ArrayList<Pair<String, Float>>(list), flags);
}
else if (r.leftNode == null && r.rightNode == null) {
System.out.println(list.toString());
System.out.println(flags.toString());
return;
}
}
我的问题是这只会打印第一条路径。
我该如何解决这个问题?
【问题讨论】:
-
你是如何调用
getTreePaths()的?您是否正在尝试递归解决问题?如果是这样,则您的代码中没有递归。 -
@BassemDy 是的,我的想法是递归地进行!
-
@queryMaster 你需要一个递归函数,它会在到达每个叶节点时返回一条路径。布尔值有点混乱......我猜字符串“左”和“右”会更好
-
@Suspended 如果您注意到,这正是我正在使用的 :) 但是我无法正确获取这些值...