【问题标题】:Problem with tree traversal method for n-ary treen叉树的树遍历方法问题
【发布时间】:2020-03-05 04:34:00
【问题描述】:

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

感谢您的帮助

【问题讨论】:

  • 调试器说什么?
  • @Evg 其实我只是做了一个调试,我知道插入方法工作正常,问题是遍历方法,但我不明白问题是什么
  • @Evg 但当我这样做n1.fils(0)->fils(0)->print(); 时,我得到一个分段错误,这真的很奇怪。 n1.fils(0)->fils(0)->print(); thake 我根的第一个孩子,然后取那个孩子的第一个孩子,在这种情况下是 D

标签: c++ tree traversal insertion


【解决方案1】:

您的插入已损坏。您首先通过复制插入节点BC

_info->getChildren()[index] = childTree;

并且然后您将节点DE 插入到原始树n1_1n1_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);

或者,您可以将节点直接插入树中。即先获取对应的Tree,然后插入进去。保留您的语法并假设某些数据成员是公开的:

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_ptrs 而不是原始指针来重写它,您将解决其中的许多问题。

【讨论】:

  • 感谢您的回答。我不知道我应该改变什么才能用std::unique_ptr写它?你能帮帮我吗?
  • 有没有办法避免处理这些树并通过引用ins 传递它们? (至少那是我认为我在做的事情,但显然我做错了)
  • @Mohammadreza,这是很多工作和解释。如果您自己能做到这一点,您将能够显着提高您的代码和对该语言的总体理解。
  • 如果有一种方法可以传递引用而不是复制树并插入原始树而不是副本,该怎么办?
  • 感谢您的回答。我将尝试使用unique_ptr 并重写此代码,因为直接插入可能不是一个好主意,因为在这种情况下我必须使用公共数据成员,这不是一个好主意
猜你喜欢
  • 1970-01-01
  • 2021-03-03
  • 2021-01-12
  • 2016-01-09
  • 1970-01-01
  • 1970-01-01
  • 2012-01-01
  • 2015-05-09
  • 1970-01-01
相关资源
最近更新 更多