在树/链表结构中遍历

时间:2015-02-05 17:35:08

标签: c data-structures linked-list binary-search-tree traversal

This is what my structure looks like

它有点像混合树/链表结构。这是我如何定义结构

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);
    }
}

如果完成了当前节点的打印路径,我的问题就是退出递归调用。

1 个答案:

答案 0 :(得分:0)

问题中显示的节点结构与使用名称childsibling而不是传统leftright的常规二叉树相同。 如果要打印所需节点的路径,则应打印包含该节点的每个子树 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。这样,您将获得从叶到根的顺序打印的路径。