判斷一棵樹是否是二叉排序樹演算法的巧妙之處
阿新 • • 發佈:2019-01-02
運用全域性變數pre和中序遍歷的思想,儲存上一個結點的指標,然後將當前結點和上一個結點進行比較,從而作出判斷。
typedef struct {
KeyType key;
... ... // 其他資料域
} TElemType;
typedef struct BiTNode {
TElemType data;
struct BSTNode *lchild, *rchild;
}BSTNode, *BSTree;
BSTree pre;//全域性變數
/*判斷是否是二叉查詢樹*/
Status isBSTree(BSTree T){
if(T){//中序遍歷
if (!isBSTree(T->lchild)) return FALSE;
if(pre->data.key > T->data.key) return FALSE;
pre = T;//儲存前驅結點
if(!isBSTree(T->rchild)) return FALSE;
return TRUE;
}
else return TRUE;
}