2014-02-07 5 views
1

전 이진 검색 트리를 사전 주문 모드에서 해제 할 수 있는지 알고 싶습니다. 바로, 늘 나를 예약 주문을 기억하자 트리의 첫 번째 잎을 자유롭게BST 사전 주문 삭제

void preorder_del(struct s_nodo ** tree) 
{ 
    if (*tree != NULL) 
     { 
      free(*tree); 
      preorder_del(&(*tree)->left); 
      preorder_del(&(*tree)->right); 
     } 
} 

나는이 작품 생각하지 않는다 :이 기능을 가지고있다?

+0

노드를 해제하면'tree-> left'와'tree-> right'는 어떤 의미가 있습니까? –

답변

2

free(*tree) 이후에 해제 된 포인터에 액세스하지 않으려면 leftright을 로컬에 기록해야합니다.

if (*tree != NULL) 
{ 
     struct s_nodo *l = (*tree)->left; 
     struct s_nodo *r = (*tree)->right; 
     free(*tree); 
     preorder_del(&l); 
     preorder_del(&r); 
} 
+0

그것은 내 맥에서 작동하지 않습니다. "malloc : *** 개체 오류 0x9000000000000000 : 포인터가 해제되었습니다." – SebastianC

+0

@SebastianC Edited. 우리는'free (* tree) '에 의해 해제되기 때문에'& (* tree) -> left'를 기록해서는 안됩니다. – timrau

+0

무료 (* 트리) 정확히 무엇입니까? 모든 잎사귀를 삭제 하시겠습니까? – SebastianC