2012-07-26 7 views
0
void BinarySearchTree::insert(int d) 
{ 
    tree_node* t = new tree_node; 
    tree_node* parent; 
    t->data = d; 
    t->left = NULL; 
    t->right = NULL; 
    parent = NULL; 

    // is this a new tree? 
    if(isEmpty()) root = t; 
    else 
    { 
     //Note: ALL insertions are as leaf nodes 
     tree_node* curr; 
     curr = root; 
     // Find the Node's parent 
     while(curr) 
     { 
      parent = curr; 
      if(t->data > curr->data) curr = curr->right; 
      else curr = curr->left; 
     } 

     if(t->data < parent->data) 
      parent->left = t; 
     else 
      parent->right = t; 
    } 
} 

질문 : 나는 tree_node의 *의 t에 대한 메모리를 할당해야 할 이유이진 트리의 C++ 기본

  1. ; 신규 사용 (해당하지 않음) tree_node * parent;?

  2. 정확히 tree_node *는 메모리에서 어떻게 보이며 무엇을합니까?

  3. 누가 내게 설명 할 수 있습니까? -> 연산자와 어떻게 작동합니까?

+0

tree_node * t는 삽입 될 새 노드로 사용되는 반면 parent는 처리 중에 부모 노드를 저장하는 데 사용되는 임시 저장 변수입니다. '-> '연산자는 접근 자이므로 객체 내에 저장된 데이터를 얻을 수 있습니다. tree_node 실제로 무엇입니까? 아마도이 트리 구현을 위해 특별히 만들어진 사용자 지정 데이터 형식 일 것입니다. 당신은 그것을 위해 당신의 근원을 조사해야 할 것입니다. – TheZ

+0

'->'는 다른 언어의'.'와 같은 것을 의미합니다; 객체의 멤버를 참조합니다. 그래서'parent-> right'는'parent' 객체의'right' 멤버를 의미합니다. –

+0

@RobertHarvey 음 ... parent는 객체가 아니라 포인터입니다. –

답변

4

이유는 무엇 tree_node의 *의 t에 대한 메모리를 할당해야합니까; 새를 사용하지만 tree_node * parent는 사용하지 않음;

에는이 필요하지만 로직의 일부입니다. t은 삽입하려는 새 노드를 나타내므로 먼저 노드를 만들어야합니다 (new에 의해 완료 됨).

while(curr) 
{ 
    parent = curr; 
    //... 

을 정확히 tree_node 무엇 *이 메모리에 어떠한가 그것이 무엇을합니까 : 그것은 이미 존재하는 노드를 참조하기 때문에 당신은 parent에 대한 메모리를 할당 할 수 있습니까?

방법은 (이 곳 정의되어야한다)에게,하지만 그렇게 같이 아마 구조입니다 :

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

은 누군가가 나받는 사람 설명 할 수 -> 연산자와 어떻게 작동하는지?

포인터를 통해 개체 멤버에 액세스하기위한 것입니다. Class* x 인 경우 x->a(*x).a과 같습니다.