由於二叉排序樹的中序遍歷時得到的一定是個乙個公升序序列,我們可以根據這一性質,利用中序遍歷進行判定。
1)設定全域性變數max為無窮小。
2)若樹為空,則返回true。
3)否則遞迴判斷左子樹是否為二叉排序樹,並用flag1儲存結果。
3)若flag1為假或者根節點關鍵字小於等於左子樹的關鍵字,則返回false。
4)否則遞迴判斷右子樹是否為二叉排序樹,並用flag2儲存結果。
5)返回flag2。
關於二叉樹的基本遍歷操作相關請詳見部落格:二叉樹的構建及其遍歷演算法//判斷是否為二叉排序樹
bool judge(binarytree* root,int&
max)
bool bst_l,bst_r;
bst_l = judge(root->lchild,max);//判斷左子樹是否為二叉排序樹
if(!bst_l ||
max>= root->
data)
max= root->
data;
bst_r = judge(root->rchild,max);//判斷右子樹是否為二叉排序樹
return bst_r;
}
關於二叉排序樹的基本操作相關請詳見部落格:二叉搜尋樹
C 判斷一棵樹是否為BST(二叉排序樹 搜尋樹)
給定一棵二叉樹,判定該二叉樹是否是二叉搜尋樹 binary search tree 二叉搜尋樹要求 結點node的左子樹所有結點的值都小於node的值。結點node的右子樹所有結點的值都大於node的值。結點node的左右子樹同樣都必須是二叉搜尋樹 假設如圖所示二叉樹 10 515 binary t...
判斷一棵樹是否為二叉搜尋樹
中序遍歷得到的值一定是公升序的,所以我們只要在遍歷的時候實時地檢查當前元素是否大於上乙個遍歷的值 lastnum 如果小於或等於,可直接得出不是二叉搜尋樹的結論。用棧來模擬中序便利的過程。definition for a binary tree node.public class treenode ...
判斷一棵樹是否為滿二叉樹
首先,我們要知道什麼是滿二叉樹。乙個深度為k,節點個數為 2 k 1 的二叉樹為滿二叉樹。這個概念很好理解。那麼,我們要怎麼判斷一棵樹是否為滿二叉樹呢?思路 在層序遍歷的過程中,找到第乙個非滿節點 non full node 滿節點 full node 指的是同時擁有左右孩子的節點。在找到第乙個非滿...