2013-07-05 18 views
3

트리가 BST인지 여부를 알아내는 데이 방법이 잘못 되었습니까? 노드의 왼쪽 하위 트리에는 노드의 키보다 키가 작은 노드 만 포함됩니다. 노드의 오른쪽 하위 트리에는 노드의 키보다 큰 키가있는 노드 만 들어 있습니다. 왼쪽 및 오른쪽 하위 트리는 모두 이진 검색 트리 여야합니다. 내 코드는 다음과 같습니다트리가 이진 검색 트리인지 확인하려면

isBST(struct node* node) 
{ 
    if (node == NULL) 
    return 1; 
    if (node->left != NULL && node->left->data > node->data) 
    return 0; 
    if (node->right != NULL && node->right->data < node->data) 
    return 0; 
    if (!isBST(node->left) || !isBST(node->right)) 
    return 0; 
    return 1; 
} 
+2

코드가 올바르지 않지만 (답을 참조하십시오), 동일한 노드를 원하는 위치에 따라 수표 중 하나 (=> 또는 <=)에 등호를 포함해야한다는 것을 기억해야합니다. – Dukeling

+0

[이진 검색 트리를 어떻게 검증합니까?] (http://stackoverflow.com/questions/499995/how-do-you-validate-a-binary-search-tree)의 가능한 중복 – Dukeling

답변

10

가이 나무에 대한 진정한 답을 반환 없기 때문에이 방법이 잘못 :

 6 
    /\ 
    4 9 
/\ 
2 10 

을가 이진 검색 트리 아니지만! 더 나은 접근법은 inorder traversal을 가져 와서 실제로 정렬되어 있는지 확인하는 것이 좋습니다.

관련 문제