它有点像混合树/链表结构。这是我如何定义结构
struct node {
nodeP sibling;
nodeP child;
nodeP parent;
char name[100];
};
节点有一个子节点,它连接到一个链表。链表上的其他元素可能有自己的子项连接到链表或单独
现在我的问题是,如何遍历此结构以搜索并打印到特定节点的路径。
任何建议将不胜感激。 感谢
更新 这是printPath函数:
//node -> root of the tree
//current = this is the node that i need to print path to
void printPath(nodeP node, nodeP current){
if (node != NULL){
if ((strcmp(node->name, current->name) == 0))
{
printf("%s/", node->name);
return; //it returns to the previous recursive call and then continues until the node is null
}
printPath(root->childDir, currentDir);
printPath(root->sibling, currentDir);
printf(" %s/", node->name);
}
}
如果完成了当前节点的打印路径,我的问题就是退出递归调用。
答案 0 :(得分:0)
问题中显示的节点结构与使用名称child
和sibling
而不是传统left
和right
的常规二叉树相同。
如果要打印所需节点的路径,则应打印包含该节点的每个子树的 root 值。所以这是伪代码:
function printPath(root, searchName)
if root is null
return false
if root.name is searchName or
printPath(root.child, searchName) or
printPath(root.sibling, searchName) then
print root.name
return true
else
return false
这里,如果root为null,则它不包含所需的节点,因此我们返回false,此路径不打印任何内容。但如果它的名字是我们想要的名字,或者它的一个子树包含我们想要的名字,我们打印名称并返回true。这样,您将获得从叶到根的顺序打印的路径。