1. 程式人生 > >判斷一棵樹是否為二叉排序樹

判斷一棵樹是否為二叉排序樹

概要

由於二叉排序樹的中序遍歷時得到的一定是個一個升序序列,我們可以根據這一性質,利用中序遍歷進行判定。

演算法

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; }

後記

關於二叉樹的基本遍歷操作相關請詳見部落格:

二叉樹的構建及其遍歷演算法
關於二叉排序樹的基本操作相關請詳見部落格:二叉搜尋樹