C 判斷一棵樹是否為BST(二叉排序樹 搜尋樹)

2021-09-25 01:18:18 字數 1549 閱讀 5377

給定一棵二叉樹,判定該二叉樹是否是二叉搜尋樹(binary search tree)?

二叉搜尋樹要求:

結點node的左子樹所有結點的值都小於node的值。

結點node的右子樹所有結點的值都大於node的值。

結點node的左右子樹同樣都必須是二叉搜尋樹

假設如圖所示二叉樹:

10

/ \

515----

---- binary tree (1)

/ \620

當我們從結點10遍歷到右結點15時,我們知道右子樹結點值肯定都在10和+infinity(無窮大)之間。當我們遍歷到結點15的左孩子結點6時,我們知道結點15的左子樹結點值都必須在10到15之間。顯然,結點6不符合條件,因此它不是一棵二叉搜尋樹。

說明我們上述的三棵二叉樹分別為:

test1:

10/ \

515/ \

1220

test2:

10/ \

515/ \620

test3:

10/ \

515/ \820

c++ - 內建型別的最大值巨集定義

判定一棵二叉樹是否是二叉搜尋樹

判斷一棵樹是否為二叉搜尋樹

中序遍歷得到的值一定是公升序的,所以我們只要在遍歷的時候實時地檢查當前元素是否大於上乙個遍歷的值 lastnum 如果小於或等於,可直接得出不是二叉搜尋樹的結論。用棧來模擬中序便利的過程。definition for a binary tree node.public class treenode ...

判斷一棵樹是否為滿二叉樹

首先,我們要知道什麼是滿二叉樹。乙個深度為k,節點個數為 2 k 1 的二叉樹為滿二叉樹。這個概念很好理解。那麼,我們要怎麼判斷一棵樹是否為滿二叉樹呢?思路 在層序遍歷的過程中,找到第乙個非滿節點 non full node 滿節點 full node 指的是同時擁有左右孩子的節點。在找到第乙個非滿...

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

由於二叉排序樹的中序遍歷時得到的一定是個乙個公升序序列,我們可以根據這一性質,利用中序遍歷進行判定。1 設定全域性變數max為無窮小。2 若樹為空,則返回true。3 否則遞迴判斷左子樹是否為二叉排序樹,並用flag1儲存結果。3 若flag1為假或者根節點關鍵字小於等於左子樹的關鍵字,則返回fal...