c - 导航基本二叉树

标签 c

所以我需要为我的应用程序创建一个基本的二叉树,但我在概念化如何“导航”时遇到了麻烦,即使在生成过程中也是如此。

当然每个节点都有一个地址,并通向另外两个节点,这两个节点分别具有正值和负值。我的问题是,如果我想使用循环创建树,我该怎么做?在第一次迭代中将有两个节点,在第三次迭代中将有四个,依此类推 - 我如何在推进循环之前遍历它们的每个地址?

    for(int i=1;i<=5;i++){
        (*currentAddress).value = i;
        (*currentAddress).positive = i;
        (*currentAddress).negative = i*-1;
        //update current address
    }

我是否必须在每次迭代中都使用 BFS 并一直添加节点直到创建 (2^n-1) 个节点?

最佳答案

您实际上需要左右指针,对吧?然后你可能想使用递归。例如(用一些随机的语言):

function Node* MakeNode(value, limit) {
    Node* node = new Node();
    (*node).value = value;
    // don't create any more children once we get to the depth limit.
    if (value < limit) {
        (*node).positive = MakeNode(value + 1);
        (*node).negative = MakeNode(value - 1);
    }
    return node;
}

// create a 5 deep tree
MakeNode(0, 5);

关于c - 导航基本二叉树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40119286/

相关文章:

c - 递归读取数组

使用 C 语言编写的带有套接字的聊天服务器

c - 如果我不知道尺寸,将二维数组传递给函数

创建遍历目录的makefile

无法访问地址处的内存

c - 如何在 C 中将目录拼接到包含路径名的 char * 中?

c - 如何模拟对任何当前聚焦的窗口的按键操作?

c# - C dll向C#返回多个变量

c - 为什么堆栈会损坏?

c - 在 C 中获取 typedef 的名称?