1

我想写一个在二叉树中显示 EulerTour 的代码。我在下面写了代码:

public void EulerTour(Node parent , Node focusNode)
{
    if(focusNode.left!= null)
         EulerTour(parent, focusNode.left);
    if(focusNode.right!= null)
         EulerTour(parent, focusNode.right);
    System.out.println(focusNode);

}

但我有 3 个问题:

  1. 适合欧拉之旅吗??

  2. 如果是,它似乎与树的 postOrder Traverse 非常相似。正确的?

  3. 如果它类似于 post Order traverse 那么我们使用 2 个单独的代码有什么区别?

提前致谢

4

2 回答 2

3
  1. 我不这么认为。
  2. 非常相似但不一样。
  3. 后序遍历如下
  1. 拜访左孩子
  2. 拜访右孩子
  3. 访问当前节点

欧拉游走如下:

  1. 访问当前节点
  2. 访问以左孩子为根的子树
  3. 访问当前节点(再次)
  4. 访问以右孩子为根的子树
  5. 访问当前节点(再次)

并不是说在 Eulers walk 中每个节点都会被访问 3 次。您可以在此处找到有关 Euler walk 的更多信息。

于 2014-01-04T13:15:36.713 回答
2

这是C++代码

void Euler_tour(TreeNode* root, vector<int>& result){
    if (root == NULL)
        return;

    result.push_back(root->data);
    if (root->left){
        Euler_tour(root->left, result);
        result.push_back(root->data);
    }
    if (root->right){
        Euler_tour(root->right, result);
        result.push_back(root->data);
    }
}
于 2014-07-24T09:42:54.027 回答