Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ n元树的树遍历方法问题_C++_Tree_Traversal_Insertion - Fatal编程技术网

C++ n元树的树遍历方法问题

C++ n元树的树遍历方法问题,c++,tree,traversal,insertion,C++,Tree,Traversal,Insertion,我有一个树类和一个私有嵌套的节点类。我正在尝试编写一个遍历方法,问题是我只能打印出树的第一级。 我不确定mu遍历方法是否有问题。因为我看不到另一种写作方式。我认为问题来自ins方法,该方法在树的特定索引中插入一个子项。我想我正在插入不同的对象 高级感谢您的帮助您的插入已中断。首先通过复制节点来插入节点B和C: _info->getChildren()[index] = childTree; 然后将节点D和E插入原始树n1_1和n1_2。以某种方式修复错误的最简单方法是更改插入顺序: n1

我有一个类和一个私有嵌套的节点类。我正在尝试编写一个遍历方法,问题是我只能打印出树的第一级。 我不确定mu遍历方法是否有问题。因为我看不到另一种写作方式。我认为问题来自
ins
方法,该方法在树的特定索引中插入一个子项。我想我正在插入不同的对象


高级感谢您的帮助

您的插入已中断。首先通过复制节点来插入节点
B
C

_info->getChildren()[index] = childTree;
然后将节点
D
E
插入原始树
n1_1
n1_2
。以某种方式修复错误的最简单方法是更改插入顺序:

n1_1.ins(0, n1_1_1);
n1_2.ins(0, n1_2_1);
n1.ins(0, n1_1);
n1.ins(1, n1_2);
或者,您可以直接将节点插入到树中。也就是说,首先获取相应的
,然后插入其中。保留语法并假设某些数据成员是公共的:

n1.ins(0, n1_1);
n1.ins(1, n1_2);

n1._info->_children[0].ins(0, n1_1_1);  // n1._info->_children[0]) is not n1_1
n1._info->_children[1].ins(1, n1_2_1);  // n1._info->_children[1]) is not n1_2

您的代码还有很多其他问题需要解决。如果你能用
std::unique_ptr
s而不是原始指针来重写它,你会解决很多问题。

调试器怎么说?@Evg实际上我刚刚做了一个调试,我知道插入方法很好,问题是遍历方法,但我不明白它的作用是什么problem@Evg但是当我做
n1.fils(0)时->fils(0)->print()我得到了一个分段错误,这确实是错误的<代码>n1.fils(0)->fils(0)->print()选择我根的第一个孩子,然后选择这个孩子的第一个孩子,在这种情况下是D。谢谢你的回答。我不知道为了用
std::unique\u ptr
编写它,我应该修改什么?你能帮帮我吗?有没有办法避免把这些树顶起来,然后通过引用
ins
?(至少这是我认为我在做的,但显然我做错了)@Mohammadreza,这是很多工作和解释。如果您能够自己管理,您将能够显著提高代码和对语言的一般理解。Evg如果有一种方法可以传递引用而不是覆盖树,并插入原始树而不是副本,该怎么办?谢谢您的回答。我将尝试使用
unique\u ptr
并重写此代码,因为直接插入可能不是一个好主意,因为在这种情况下,我必须使用公共数据成员,这不是一个好主意