c - 三度树的递归和非递归遍历

标签 c algorithm data-structures tree tree-traversal

我正在尝试编写一个三度树的中序遍历(左、节点、中、右)的算法。

下面的算法正确吗?

inorder(node)
{
  if (node) {
    inorder(node->left);
    print("%d", node->value);
    if (node->mid) {
      inorder(node->mid);
      print("%d", node->value);
      inorder(node->right);
    }
    else
      inorder(node->right);
  }
}

最佳答案

您错误地打印了节点的值两次。

您不需要检查node->mid,因为这是在inorder(node->mid);内部检查的。

inorder(node)
{
  if (node)
  {
    inorder(node->left);
    print("%d ", node->value);
    inorder(node->mid);
    inorder(node->right);
  }
}

关于c - 三度树的递归和非递归遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19675356/

相关文章:

algorithm - 如何发现 "greedy"算法?

c - 最小成本算法

data-structures - Tree是数据结构还是抽象数据类型?

c++ - 标识符和宏有什么区别?

c - 字符串 - 段错误

c - 简单字符串操作中的段错误

c - 我们如何在替换时间之前在 C 宏/预处理器中完成数学运算,而不只是替换它?

c - 结构、typedef 和 malloc、calloc

algorithm - 随机算法的属性(蒙特卡罗,拉斯维加斯)

database - SQLite:防止碎片化