--- 歡迎指正---
自己想到的方法是:使用 中序遍歷陣列或者鍊錶,然後比較陣列或者鍊錶中的資料是否有序。
cc150 提供了更棒的解法。
原文大致描述:
//《方法1>//首先我們想到的是二叉樹中序遍歷後的結果是有序的,根據這個結果,我們可以中序遍歷二叉樹,並把遍歷結果存放在乙個陣列裡面,
// 然後判斷這個陣列大小是否是有序陣列,如果是有序陣列,則是二叉查詢樹,否則就不是。
//這個方法的時間複雜度是o(n),但是空間複雜度比較高,需要浪費o(n)的儲存空間。
//《方法2>
//其實在《方法1>的基礎上,我們可以在中序遍歷的同時,比較大小,每次記錄下上次遍歷過的元素的值,如果當前元素的值大於上次遍歷元素的值,則接著遍歷,否則返回false,
// 因為這個記錄是乙個址傳遞,所以需要用到引用形參進行傳遞。
//這個方法的時間複雜度與《方法1>的時間複雜度相同,只是空間複雜度只需要乙個元素o(1)。
按照提供的思路,自己嘗試寫了下**:
結點結構:
structnode
};
判定方法:
//採用中序遍歷的思路
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...