演算法 判斷是否為二叉搜尋樹

2021-10-02 19:52:04 字數 872 閱讀 9675

輸入:

2/ \

14/ \ 3

5輸出:

true

輸入:

5/ \

14/ \ 3

6輸出:

false

起初使用堆的方式判定是不對的,二叉搜尋樹的任意結點應該總大於所有左子樹結點以及總小於所有右子樹結點,不能只與左右孩子比較。

分析:(兩種解法)

如果是空樹,則認為是 bst,返回true非空,若 <= 下界 或 >= 上界 則返回false以上條件均不滿足,則遞迴判斷左右孩子是否為 bst

bool

isvalidbst

(node* root,

int low,

int high)

intmain()

呼叫時,初始的上下界為整型可表示的最小最大值。

bool

isvalidbst

(node* root)

return

true

;}

bool

isvalidbst

(treenode* root)

p = root-

>right;

if(p)

return

isvalidbst

(root-

>left)

&&isvalidbst

(root-

>right)

;}

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

剛開始我想的很簡單,覺得只要遞迴判斷左孩子是否小於根節點 右孩子是否大於根節點就行了 二叉搜尋樹 左孩子 根結點 右孩子 根節點 下面的寫法 錯的!錯的!二叉樹的判斷應該是左子樹的最大值 小於 根節點 右子樹的最小值大於根節點 bool isvalidbst treenode root if roo...

判斷是否為二叉搜尋樹(C 實現)

給定乙個根結點如何判斷一棵樹是否為二叉搜尋樹呢?下面我們用三種方式來處理這個問題 根據二叉搜尋樹的特徵,二叉搜尋樹的中序遍歷應該為乙個有序集合 對樹進行中序遍歷,將結果儲存在temp陣列中 檢測temp陣列是否為公升序排列,如果是,則為bst,反之則不是 這裡為了好理解就直接使用遞迴寫 void i...

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

搜尋二叉樹 一棵樹上任何乙個節點為頭的子數,左子樹都比它小,右子樹都比它大 只要中序遍歷的結果是依次公升序的,它就是平衡二叉樹 include include using namespace std class isbstandcbt bool isbst node head else return...