1 寻找二叉树上从根结点到给定结点的路径
分为递归方法和非递归方法,强烈推荐看一下这篇文章:递归和非递归方式寻找二叉树上从根结点到给定结点的路径
2 寻找N叉树上从根结点到给定结点的路径
这里的方法是从1中借鉴过来的,大同小异
2.1 递归方法
@Data
public class ArchBlockTreeNode {
private String blockName; // 结点名
private Integer level; // 当前结点所在的层数
private List<ArchBlockTreeNode> childrenNodes; // 孩子结点
}
public boolean getPathFromRoot(ArchBlockTreeNode root, String targetName, List<String> path) {
if (null == root) {
return false;
}
String bl = root.getBlockName();
path.add(bl);
if (targetName.equals(root.getBlockName())) {
return true;
}
boolean flag = false;
List<ArchBlockTreeNode> children = root.getChildrenNodes();
if (null != children && !children.isEmpty()) {
for (int i = 0; i < children.size(); i++) {
if (!flag) {
// 如果在左边的子树中找到了则不查找右边的子树
flag = getPathFromRoot(root.getChildrenNodes().get(i), targetName, path);
}
}
}
if (!flag) {
//孩子中都找不到,弹出栈顶元素
path.remove(path.size() - 1);
}
return flag;
}