マシンテストノート9-バイナリツリーの横断

バイナリツリーの走査はテンプレートを習得するだけでよく、バイナリツリーの構築では、実装時にパラメーターを渡すときにポインターの使用を考慮する必要があります。

プレオーダートラバーサルのシーケンスを入力し、バイナリツリーを作成して、順番にトラバースします

#include <bits / stdc ++。h> 
#include < string >
 using  namespace std;
typedef 構造ノード
{
    char データ;
    struct node * lchild;
    struct node * rchild;
} T;
int i = 0 ;

void createTree(T ** tree、string s)// ポインターを変更するため、第2レベルのポインターを使用します
{
     if(i> s.size()-1 return ;
     if(s [i] == ' ' ) {
          *ツリー= NULL;
         i ++ ;
    } その他{ * tree)= 新しいT;
    // (* tree)=(T *)malloc(sizeof(T)); 
    (* tree)-> data = s [i ++ ];
    createTree(&((* tree)-> lchild)、s);
    createTree(&((* tree)-> rchild)、s);
    }
}
void inorderTraverse(T * t)
{
    もし(t){

      inorderTraverse(t- > lchild);
      cout << t-> data << "  " ;
      inorderTraverse(t- > rchild);
    }
}
int main()
{
    文字列str;
    cin >> str;
    T * tree = NULL;
    createTree(tree、str);
    inorderTraverse(ツリー);
     0を返します
}

ノードを削除するコードがないため、メモリリークが発生します。実際、参照の使用ははるかに直感的であり、ポインタの使用のレビューと見なすことができます。

おすすめ

転載: www.cnblogs.com/Sunqingyi/p/12682841.html