这个代码是否适用于二叉树中的Euler巡演?

时间:2014-01-04 12:56:51

标签: java binary-tree postorder

我想在二叉树中显示一个显示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 of tree非常相似。右

  3. 如果它与post order traverse类似,那么我们使用2个分隔代码有什么区别?

  4. 提前致谢

2 个答案:

答案 0 :(得分:3)

  1. 我不这么认为。
  2. 非常相似但不一样。
  3. 邮政订单遍历如下
  4.   
        
    1. 访问左孩子
    2.   
    3. 访问正确的孩子
    4.   
    5. 访问当前节点
    6.   
    欧拉步行如下:

      
        
    1. 访问当前节点
    2.   
    3. 访问以左子女为根的子树
    4.   
    5. 访问当前节点(再次)
    6.   
    7. 访问根据右孩子的子树
    8.   
    9. 访问当前节点(再次)
    10.   

    并非在Eulers步行中每个节点都会被访问三次。您可以找到有关Eulers walk here的更多信息。

答案 1 :(得分: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);
    }
}