【问题标题】:Find specific node in "in-order tree traversal"在“有序树遍历”中查找特定节点
【发布时间】:2014-01-25 16:52:34
【问题描述】:

我正在努力创建自己的外壳。

我为用户输入创建了一个词法分析器和一个解析器(用于创建二叉树)。 所以对于这样的命令:cat main.c | ls |厕所

我得到了这棵树:

           "|"
           / \
          /   \
         /     \
 "cat main.c"   "|"
                / \
               /   \
             "ls"  "wc"

所以我的树遍历函数(按顺序)是这样的:

inorder(root)
{
   inorder(root->left);
   //exec cmd and do redirection

   inorder(root->right);
}

我的问题是当我在节点“ls”或“wc”上时,我不知道如何 检查命令前后是否有管道

有什么想法吗?

【问题讨论】:

  • 解析树不是 B 树。

标签: c shell tree binary-tree inorder


【解决方案1】:

在您的解析树中,管道是节点,命令是叶子。管道必须同时具有左右分支。当您从管道向左走时,您现在所在的管道就是您要执行的命令的输出管道。当你向右走时,你所在的管道就是目标命令的输入管道。

所以将输入和输出管道作为参数传递。如果该命令没有重定向,则它们指向 NULL| 节点之一。

inorder(root, in, out)
{
    if (root is cmd) {
        execute(root, in, out);
    } else {
        // root is pipe
        inorder(root->left, in, root);
        redirect(in, out);
        inorder(root->right, root, out);
    }
}

inorder(root, NULL, NULL) 从树的根开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    相关资源
    最近更新 更多