判斷一棵樹是否為二叉排序樹
阿新 • • 發佈:2019-01-07
概要
由於二叉排序樹的中序遍歷時得到的一定是個一個升序序列,我們可以根據這一性質,利用中序遍歷進行判定。
演算法
1)設定全域性變數max為無窮小。
2)若樹為空,則返回true。
3)否則遞迴判斷左子樹是否為二叉排序樹,並用flag1儲存結果。
3)若flag1為假或者根節點關鍵字小於等於左子樹的關鍵字,則返回false。
4)否則遞迴判斷右子樹是否為二叉排序樹,並用flag2儲存結果。
5)返回flag2。
//判斷是否為二叉排序樹
bool Judge(BinaryTree* root,int& MAX){
if(root == NULL){//樹為空則為二叉排序樹
return true;
}
bool bst_l,bst_r;
bst_l = Judge(root->lchild,MAX);//判斷左子樹是否為二叉排序樹
if(!bst_l || MAX >= root->data){
return false;
}
MAX = root->data;
bst_r = Judge(root->rchild,MAX);//判斷右子樹是否為二叉排序樹
return bst_r;
}
後記
關於二叉樹的基本遍歷操作相關請詳見部落格: 二叉樹的構建及其遍歷演算法
關於二叉排序樹的基本操作相關請詳見部落格:二叉搜尋樹