c++中的树遍历
Tree traversal in c++
我有一个足够简单的赋值。我必须创建一个树,使用这个结构:
struct gennode
{
int item;
gennode * firstChild;
gennode * siblingList;
gennode * prevSibling;
gennode * parent;
};
我的搜索算法是:
gennode* general::search(int element, gennode *t)
{
if(t == NULL)
{
return t;
}
if(t->item == element)
{
return t;
}
if(t->firstChild != NULL)
{
return search(element, t->firstChild);
}
return search(element, t->siblingList);
}
我不知道出了什么问题。它似乎并不想找到所有的孩子。例如,如果我有1作为根,2、3、4是它的子结点,5、6、7是2的子结点,8、9是4的子结点,我就无法找到2的子结点。
我不知道我的问题在哪里。
编辑:下面是一个以1为根结点,2和3为子结点的树的基因节点结构的示例。
gennode * one;
gennode * two;
gennode * three;
one->item = 1;
one->firstChild = two;
one->siblingList = NULL;
one->prevSibling = NULL;
one->parent = NULL;
two->item = 2;
two->firstChild = NULL;
two->siblingList = three;
two->prevSibling = NULL;
two->parent = one;
three->item = 3;
three->firstChild = NULL;
three->siblingList = NULL;
three->prevSibling = two;
three->parent = one;
看起来您的问题是搜索firstChild或siblingList的逻辑。也就是说,如果你有一个firstChild,你永远不会看到兄弟姐妹。如果您的树是从后到前构建的,那么它可能解释了为什么要搜索节点4,而不是节点2。相反,您可能想要询问search(element, t->firstChild)是否成功,如果失败,则执行search(element, t->siblingList):
if(t->firstChild != NULL)
{
auto result = search(element, t->firstChild);
if( result != nullptr )
return result;
}
return search(element, t->siblingList);
相关文章:
- 有什么方法可以遍历结构吗
- 在循环中按顺序遍历成员变量
- 遍历模板参数
- 在遍历处理程序的向量时注册和注销处理程序
- C++RapidXml-使用first_node()遍历以修改XML文件中节点的值
- 遍历并行数组以确定C++中的最大数字
- 遍历顺序由 std::文件系统directory_iterator给出
- 遍历链表时的无限循环
- 遍历unordered_map向量
- 从预序遍历构造 bst 的 c++ 和 python 解决方案之间的区别
- C++声明双链表,使用两个 for 循环双向遍历列表并打印
- 如何正确地推回然后遍历堆中对象的向量?
- 遍历二维数组的所有子数组
- 如何在可变参数模板函数中遍历可变参数元组?
- 避免在遍历 IShellItemArray 时出现代码重复
- 从特定键开始遍历地图
- 关于链表遍历和调试的困惑
- 将树节点添加到向量向量中的 n 元树遍历的平均和最坏情况时间复杂度是多少?
- 为什么即使使用 for 循环遍历我的向量,它也没有输出到控制台?(C++)
- 二叉树级别顺序遍历在leetcode中