バイナリツリーの走査はテンプレートを習得するだけでよく、バイナリツリーの構築では、実装時にパラメーターを渡すときにポインターの使用を考慮する必要があります。
例
プレオーダートラバーサルのシーケンスを入力し、バイナリツリーを作成して、順番にトラバースします
#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を返します。 }
ノードを削除するコードがないため、メモリリークが発生します。実際、参照の使用ははるかに直感的であり、ポインタの使用のレビューと見なすことができます。