C++ 父数组n元树的逐级遍历?
给定存储在父数组中的n元树,子元素存储在指向数组的指针数组中,其中第一个值是子元素的数量: (childArray[2][0]显示节点2有2个子节点,childArray[2][1]显示其第一个子节点是5,以此类推) 生成如下所示的树:C++ 父数组n元树的逐级遍历?,c++,arrays,algorithm,tree,C++,Arrays,Algorithm,Tree,给定存储在父数组中的n元树,子元素存储在指向数组的指针数组中,其中第一个值是子元素的数量: (childArray[2][0]显示节点2有2个子节点,childArray[2][1]显示其第一个子节点是5,以此类推) 生成如下所示的树: 3 /|\ 0 2 4 | |\ 1 5 6 使用队列,如何逐级输出树,如下所示: 级别1:3 第二级:0、2、4 三级:1、5、6 级别1和级别2很容易,因为级别1只是根,级别2只是它的子级,但在这之后,我不知道如何让它获取子级的子级。一种方法是使用数
3
/|\
0 2 4
| |\
1 5 6
使用队列,如何逐级输出树,如下所示:
级别1:3
第二级:0、2、4
三级:1、5、6
级别1和级别2很容易,因为级别1只是根,级别2只是它的子级,但在这之后,我不知道如何让它获取子级的子级。一种方法是使用数据结构 从一些队列q开始,并将其放入其父项为-1的(唯一)项的索引中。现在,在每一步,直到q为空
- 执行v一种方法是使用数据结构
从一些队列q开始,并将其放入其父项为-1的(唯一)项的索引中。现在,在每一步,直到q为空
- 执行v您必须在树上执行(广度优先搜索),同时保持推入下一级别的节点数。大纲:
q.push(root); nodesInCurrentLevel = 1; nodesInNextLevel = 0; currentLevelIndex = 1; while q is not empty do: u = q.pop() print currentLevelIndex and u decrement nodesInCurrentLevel for every child v of u do: increment nodesInNextLevel q.push(v) if nodesInCurrentLevel is 0 do: nodesInCurrentLevel = nodesInNextLevel nodesInNextLevel = 0 increment currentLevelIndex
当然,这会将输出打印为级别2:0级别2:2等。您可以将当前级别节点存储在循环中的临时列表中,并根据需要进行打印。您必须在树上执行(广度优先搜索),同时保持推入下一级别的节点数。大纲:q.push(root); nodesInCurrentLevel = 1; nodesInNextLevel = 0; currentLevelIndex = 1; while q is not empty do: u = q.pop() print currentLevelIndex and u decrement nodesInCurrentLevel for every child v of u do: increment nodesInNextLevel q.push(v) if nodesInCurrentLevel is 0 do: nodesInCurrentLevel = nodesInNextLevel nodesInNextLevel = 0 increment currentLevelIndex
当然,这会将输出打印为级别2:0级别2:2,等等。您可以将当前级别的节点存储在循环中的临时列表中,并根据需要打印。我投票将此问题作为主题外的问题结束,因为它是家庭作业。提示:如果这是一项大学作业,我只会提示尝试找到一种方法,将一些特殊值放入队列,例如:级别结束。家庭作业是并不总是脱离实际的编程挑战。任务已经完成并提交,这只是一个我无法理解的额外学分选项。我投票将这个问题作为离题题结束,因为它是家庭作业。提示:如果这是一项大学作业,我只想提示尝试找到一种方法,将一些特殊值放入队列,例如:级别结束。家庭作业并不总是脱离实际编程挑战。作业已经完成并交了,这只是一个额外学分的选择,我想不出来。
- 执行v您必须在树上执行(广度优先搜索),同时保持推入下一级别的节点数。大纲: