首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有可能有序地遍历一棵k叉树吗?

有可能有序地遍历一棵k叉树吗?
EN

Stack Overflow用户
提问于 2016-11-25 22:52:01
回答 1查看 2.7K关注 0票数 5

根据国内提出的语言标准的说法,逆流而上的鲑鱼需要“对河流系统…进行有序搜索,以找到与鲑鱼同名的河流节点”(第6.4.2节)。问题是河流节点存储在n叉树中,所以我不知道如何对这棵树进行有序搜索。谷歌搜索没有提到任何相关问题,维基百科页面甚至没有提到任何类型的遍历。有可能有序地遍历一棵k叉树吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-25 23:08:10

是的,这确实是可能的!让我们来类比推理吧。在二叉树中,节点如下所示:

代码语言:javascript
复制
            +---+
            | v |
            +---+
           /     \
          T0     T1

然后按以下方式进行无序遍历:

  1. 递归地执行T0的无序遍历
  2. 访问v
  3. 递归地执行T1的无序遍历。

换句话说,你可以想象当你发现这些价值观时,从左到右浏览它们。扫描首先击中T0,然后点击v,然后点击T1。

多路树中的节点如下所示:

代码语言:javascript
复制
    +----+----+----+ ... +----+
    | v0 | v1 | v2 | ... | vn |
    +----+----+----+ ... +----+
   /     |    |    |     |     \
  T0    T1    T2   T3   Tn     Tn+1

如果我们在这里使用“从左到右扫描”的想法,我们会这样做:

  1. 递归地执行T0的无序遍历。
  2. 访问v0。
  3. 递归地执行T1的无序遍历。
  4. 访问v1。
  5. ..。
  6. 递归地对Tn进行无序行走。
  7. 访问;访问;访问
  8. 递归地执行Tn+1的无序遍历。

下面是一些伪代码:

代码语言:javascript
复制
void inorderWalk(Node* v) {
    if (v == null) return;

    for (int i = 0; i < v.numChildren; i++) {
        inorderWalk(v.child[i]);
        visit(v.value[i]);
    }
    inorderWalk(v.child[v.numChildren]);
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40813141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档