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. もしそうなら、tree の postOrder Traverse と非常によく似ているようです。右?

  3. ポスト オーダー トラバースに似ている場合、2 つの分離コードを使用する違いは何ですか?

前もって感謝します

4

2 に答える 2

3
  1. 私はそうは思わない。
  2. 非常に似ていますが、同じではありません。
  3. ポスト オーダー トラバーサルは次のとおりです。
  1. 左の子を訪問
  2. 訪問右の子
  3. 現在のノードにアクセス

オイラー ウォークは次のとおりです。

  1. 現在のノードにアクセス
  2. 左の子をルートとするサブツリーにアクセス
  3. 現在のノードにアクセス (再度)
  4. 右の子をルートとするサブツリーにアクセス
  5. 現在のノードにアクセス (再度)

オイラー ウォークでは、すべてのノードが 3 回アクセスされるわけではありません。オイラー ウォークの詳細については、こちらを参照してください。

于 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 に答える