2012-03-05 11 views
0

ツリーデータ構造に関するチュートリアルをC の左、右、親ノードを使用して教えてもらえますか?私はGoogleとStack Overflowで検索しましたが、Node * leftとNode * rightだけのツリーしか見つかりませんでした。私はこのtree structureがニーズのすべてをカバーして考える左、右、親ノードを持つツリーデータ構造についてのチュートリアル

struct Node { 
    int data; 
    Node *parent, *left, *right; 
}; 
+0

具体的には何を学びたいですか?これはどのような種類のツリーです(一般的なバイナリツリー?赤/黒ですか?) – templatetypedef

+0

たとえば、左ノードを持たないノードはどうでしょうか?または親ですか? –

+0

バイナリツリーです。目的は親の値が何であるかをテストすることです。したがって、ノードの構造に* parentを追加する必要があります。私はそれをした、私はセグメント違反がある、私は本当に理解していないと思うと私はチュートリアルが必要です。 – lilawood

答えて

1

私にはわかりません。そして、実際には私はこれについてのチュートリアルを見つけることができないと思っています。これはアルゴリスム関連の質問にもっと似ています。 CLRを思い出す限り、1はこのトピックを少し扱いました。

これは、このようなツリーの場合、addがどのように見えるかの例です。しかし、私はCLRがそれをコードのいくつかの行で例証できるよりもうまくカバーしていると思います。

int add(node **root, int value) 
{ 
    node *var,*parent_node; 
    var = malloc(sizeof(node)); 
    var->data = value; 
    /* if the tree hasn't been initialised we do so now */ 
    if (*root == NULL) 
    { 
     var->parent = NULL; 
     var->left = NULL; 
     var->right = NULL; 
     return 0; 
    } 
    /* we look for the future parent of our new node */ 
    parent_node = search(*root,value); 
    /* if the value already exists we return -1 */ 
    if (parent_node->data == value) 
     return 0; 
    var->parent = parent_node; 
    /* put the new node into position */ 
    if (parent_node->data > value) 
     parent_node->left = var; 
    else 
     parent_node->right = var; 
    return 0; 
} 

この検索機能は、検索時に親が入っていないため、バイナリツリーのテキスト検索機能です。値が見つからない場合は平均検索でNULLが返されるため、NULLの「親」を返すように修正することをお勧めします。次のようなもの:

node *search(node *root, int value) 
{ 
    node *var, *cursor; 
    cursor = root; 
    while(cursor->data != value) 
    { 
     if (cursor->data > value) 
      var = cursor->left; 
     else 
      var = cursor->right; 
     if (var == NULL) 
      return cursor; 
     cursor = var; 
    } 
    return cursor; 
} 
1

: を明確にするために、私は木のチュートリアルを探しています。最初にtree.hhを見てくださいが、C++です。

関連する問題