C ++でのZigZagバイナリツリートラバーサル

Akriti anand

二分木のジグザグ走査を試みています。しかし、私は1つのタイプのテストケース、つまりツリーのバランスが取れていない場合に行き詰まっています。私が私の入力をとして与えるならば

3
3 9 20 null null 15 7

次のような二分木の場合:

    3
   / \
  9  20
    /  \
   15   7

出力が表示されます:

3 
20 9 
0 

入力が39 20 1 null 15 7の場合、出力は3 20 9 10です。

以下は私のコードです。

struct node
    {
        int data;
        node* left;
        node* right;
    };

void order (node* root, map <int, vector <int> >& ans, int level, int k) {
    if (root == NULL) {
        return;
    }

    if (k==0) {
        if (root->left != NULL) {
            ans[level+1].push_back(root->left->data);
            order (root->left, ans, level+1, 1);
        }
        if (root->right != NULL) {
            ans[level+1].push_back(root->right->data);
            order (root->right, ans, level+1, 1);
        }
    }
    else if (k==1) {
        order (root->left, ans, level+1, 0);
        order (root->right, ans, level+1, 0);

        if (root->right != NULL)
            ans[level+1].push_back(root->right->data);
        if (root->left != NULL)
            ans[level+1].push_back(root->left->data);
    }
}

vector<vector<int> > zigzag(node* root){
     map <int, vector <int> > ans;
     vector <vector <int> > zig;

     ans[0].push_back(root->data);

     order(root, ans, 1, 1);

     for (auto it = ans.begin(); it != ans.end(); it++ ) {   //converting map into vector
        zig.push_back(it->second);
     }
     return zig;
 }

私が理解していることから、入力がnullの場合、コードは何も返さず、さらにノードの実行を続行する必要があります。私は自分の間違いを理解することができません。誰か助けてもらえますか?TIA!

ショーンピーターズ

コードは実際には、提供されたテストケースで機能するように見えます。入出力に問題があるのではないかと思います。ただし、ソリューション自体は残念ながらそうではありません。次のテストケースについて考えてみます。

      1
     / \
    5   2
   /     \
  6       3
 /         \
7           4

ソリューションは次のように出力します:[[1]、[5、2]、[6、3]、[7、4]]

ジグザグベクトルの各ベクトルをレベルと呼びましょう。

  1. まず、最初のレベルに1(ルート)を追加します。
  2. k == 1 level == 1次に、左に再帰します。
  3. k == 0 level == 2レベル2に6を正しく追加し、もう一度左に繰り返します。
  4. k == 1 level == 3左または右に再帰できません。レベル3に7を誤って追加します。戻る
  5. k == 0 level == 2正しく再帰できません。戻る。
  6. k == 1 level == 1レベル1に5を誤って追加します。右に繰り返します。

このアプローチは正しい解決策にたどり着くのが難しいだろうと思います。主にDFSの性質のためです。BFSソリューションが正しい道かもしれません。それは当然、これらのレベルごとのスタイルの問題に適しています。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

C のバイナリ ツリー トラバーサルで出力がありません

分類Dev

C / C ++でのXMLファイル(バイナリツリーのフォレスト)の解析

分類Dev

テンプレート付きのc ++バイナリツリーヘルプ

分類Dev

Cのバイナリツリールートに値を挿入します

分類Dev

挿入後のベクトルベースのバイナリツリーでのC ++印刷値

分類Dev

スタックを使用して反復的にCバイナリ検索ツリーポストオーダートラバーサル

分類Dev

指定されたインデントレベルのバイナリツリーをC ++で印刷する

分類Dev

指定されたインデントレベルのバイナリツリーをC ++で印刷する

分類Dev

Cで整数の配列を返すプレオーダーツリートラバーサル関数

分類Dev

Objective-Cでのバイナリサーチツリーの実装に関する指示が必要

分類Dev

C言語の整数ストレージ用のバイナリツリー

分類Dev

C#バイナリ検索ツリーで特定のノードを検索

分類Dev

C ++でバイナリツリーを操作する方法は?

分類Dev

OpenCV C ++での分散ローカルバイナリパターン(VLBP)のヒストグラム計算

分類Dev

MatlabのクライアントはどのようにしてバイナリデータをCのサーバーに送信できますか?

分類Dev

C#でのバイナリ検索ツリーではなく、完全なバイナリツリーの実装

分類Dev

Cでのバイナリ比較のエラー

分類Dev

C#バイナリライターushortバイトの順序

分類Dev

Cでツリートラバーサルと連結がクラッシュする

分類Dev

Cでのシンプルなクライアントサーバーアプリケーション#

分類Dev

C ++バイナリストリーム

分類Dev

バイナリ '==':ベクトルC ++の演算子がエラーを検出しませんでした

分類Dev

cで自分のバイナリツリーadtをデバッグする際の問題

分類Dev

C ++バイナリ検索ツリーのswitchステートメントの問題

分類Dev

I2Cバス上のセンサーデバイスツリーエントリ

分類Dev

c ++データ構造は、ベクトルを使用してバイナリツリーを実装します

分類Dev

mallocを使用したバイナリツリー、Cコードの問題

分類Dev

C#コンソールでバイナリ検索ツリーを表示する

分類Dev

C ++でバイナリ検索ツリーを作成できません

Related 関連記事

  1. 1

    C のバイナリ ツリー トラバーサルで出力がありません

  2. 2

    C / C ++でのXMLファイル(バイナリツリーのフォレスト)の解析

  3. 3

    テンプレート付きのc ++バイナリツリーヘルプ

  4. 4

    Cのバイナリツリールートに値を挿入します

  5. 5

    挿入後のベクトルベースのバイナリツリーでのC ++印刷値

  6. 6

    スタックを使用して反復的にCバイナリ検索ツリーポストオーダートラバーサル

  7. 7

    指定されたインデントレベルのバイナリツリーをC ++で印刷する

  8. 8

    指定されたインデントレベルのバイナリツリーをC ++で印刷する

  9. 9

    Cで整数の配列を返すプレオーダーツリートラバーサル関数

  10. 10

    Objective-Cでのバイナリサーチツリーの実装に関する指示が必要

  11. 11

    C言語の整数ストレージ用のバイナリツリー

  12. 12

    C#バイナリ検索ツリーで特定のノードを検索

  13. 13

    C ++でバイナリツリーを操作する方法は?

  14. 14

    OpenCV C ++での分散ローカルバイナリパターン(VLBP)のヒストグラム計算

  15. 15

    MatlabのクライアントはどのようにしてバイナリデータをCのサーバーに送信できますか?

  16. 16

    C#でのバイナリ検索ツリーではなく、完全なバイナリツリーの実装

  17. 17

    Cでのバイナリ比較のエラー

  18. 18

    C#バイナリライターushortバイトの順序

  19. 19

    Cでツリートラバーサルと連結がクラッシュする

  20. 20

    Cでのシンプルなクライアントサーバーアプリケーション#

  21. 21

    C ++バイナリストリーム

  22. 22

    バイナリ '==':ベクトルC ++の演算子がエラーを検出しませんでした

  23. 23

    cで自分のバイナリツリーadtをデバッグする際の問題

  24. 24

    C ++バイナリ検索ツリーのswitchステートメントの問題

  25. 25

    I2Cバス上のセンサーデバイスツリーエントリ

  26. 26

    c ++データ構造は、ベクトルを使用してバイナリツリーを実装します

  27. 27

    mallocを使用したバイナリツリー、Cコードの問題

  28. 28

    C#コンソールでバイナリ検索ツリーを表示する

  29. 29

    C ++でバイナリ検索ツリーを作成できません

ホットタグ

アーカイブ