二叉搜尋樹判定方法(c 實現)

2021-09-13 14:45:10 字數 781 閱讀 7699

--- 歡迎指正---

自己想到的方法是:使用 中序遍歷陣列或者鍊錶,然後比較陣列或者鍊錶中的資料是否有序。

cc150 提供了更棒的解法。

原文大致描述:

//《方法1>

//首先我們想到的是二叉樹中序遍歷後的結果是有序的,根據這個結果,我們可以中序遍歷二叉樹,並把遍歷結果存放在乙個陣列裡面,

// 然後判斷這個陣列大小是否是有序陣列,如果是有序陣列,則是二叉查詢樹,否則就不是。

//這個方法的時間複雜度是o(n),但是空間複雜度比較高,需要浪費o(n)的儲存空間。

//《方法2>

//其實在《方法1>的基礎上,我們可以在中序遍歷的同時,比較大小,每次記錄下上次遍歷過的元素的值,如果當前元素的值大於上次遍歷元素的值,則接著遍歷,否則返回false,

// 因為這個記錄是乙個址傳遞,所以需要用到引用形參進行傳遞。

//這個方法的時間複雜度與《方法1>的時間複雜度相同,只是空間複雜度只需要乙個元素o(1)。

按照提供的思路,自己嘗試寫了下**:

結點結構:

struct

node

};

判定方法:

//

採用中序遍歷的思路

bool is_bst(node *pnode, int &last_val)

posted @

2019-03-23 08:33

mohist 閱讀(

...)

編輯收藏

LeetCode 二叉搜尋樹判定

驗證二叉搜尋樹 給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。中序遍歷即 左中右 並把遍歷節點依次放在列表中就能保證列表從小到大排列。因此檢驗最終的列...

c 實現二叉搜尋樹

h部分 ifndef binaryserchtree bst h define binaryserchtree bst h include template class bst 宣告 template class element template class bstnode template cla...

c 實現二叉搜尋樹

c 實現二叉搜尋樹 include include using namespace std struct node class tree tree tree void tree creattree node rt,int n if rt data n else else void tree leve...