C++ 在C+中遍历二叉树中的每条路径的逻辑是什么+;?

C++ 在C+中遍历二叉树中的每条路径的逻辑是什么+;?,c++,tree,tree-traversal,C++,Tree,Tree Traversal,这是我第一次研究二叉树,我看到了很多关于路径遍历的问题,其中一个问题是找到一个特定节点的路径。这在二叉搜索树中非常容易,但在普通二叉树中非常困难,因为节点中的元素之间没有关系。我提出了许多逻辑,但没有一个适用于树中的所有节点。 我还想知道遍历从根节点到叶节点的每一条路径的逻辑是什么 谢谢。使用递归。具体细节取决于您定义树的确切方式,但它可能看起来像这样 void visit(TreeNode* node, vector<Node*>& path) { // check

这是我第一次研究二叉树,我看到了很多关于路径遍历的问题,其中一个问题是找到一个特定节点的路径。这在二叉搜索树中非常容易,但在普通二叉树中非常困难,因为节点中的元素之间没有关系。我提出了许多逻辑,但没有一个适用于树中的所有节点。 我还想知道遍历从根节点到叶节点的每一条路径的逻辑是什么


谢谢。

使用递归。具体细节取决于您定义树的确切方式,但它可能看起来像这样

void visit(TreeNode* node, vector<Node*>& path)
{
    // check for NULL
    if (node == NULL)
        return;
    // add node to path
    path.push_back(node);
    // print the node path
    ...
    // visit left child
    visit(node->left, path);
    // visit right child
    visit(node->right, path);
    // remove node from path
    path.pop_back();
}

// start at the root
vector<Node*> path;
visit(root, path);
void访问(TreeNode*节点、向量和路径)
{
//检查空值
if(node==NULL)
返回;
//将节点添加到路径
路径。推回(节点);
//打印节点路径
...
//探望左撇子
访问(节点->左侧,路径);
//看望合适的孩子
访问(节点->右侧,路径);
//从路径中删除节点
path.pop_back();
}
//从根本上开始
向量路径;
访问(根、路径);

<代码>不提供任何代码,这几乎不是一个C++问题…我用C++来编写这些程序,我需要一个逻辑,我不认为需要一些代码。这实际上只是一个关于二叉树的问题,这正是我想说的。你说“遍历每一条路径”,这听起来像是一个很大的工作,可能是指数性质的,但你可以说“访问每一个节点,它是一棵树”,这听起来像一个O(n)任务,是一个常见的地方。在web上搜索深度优先搜索或广度优先搜索,以获取有关如何操作的指南。(注意,如果您想打印路径,DFS通常更容易)。我问Sam的同一个问题:这种逻辑对于遍历来说是正确的,但例如,如果问题是打印元素的路径,那么如何执行?@user3020666如果您的树有一个
parent
字段,那么您只需按照父链接即可获得路径。如果没有,那么你所要做的就是记住你下树的路。将
路径
参数添加到
访问
中,并在向下树时向其添加节点(或者在向上树时从中删除节点)。@user3020666请参见编辑。