驗證一顆二叉搜尋樹

2021-09-25 18:47:11 字數 612 閱讀 4693

給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。

假設乙個二叉搜尋樹具有如下特徵:

節點的左子樹只包含小於當前節點的數。

節點的右子樹只包含大於當前節點的數。

所有左子樹和右子樹自身必須也是二叉搜尋樹。

這裡有一種錯誤的思路:判斷當前節點大於左節點,小於右節點,以此遞迴下去,當不滿足上面條件就返回false。

其實這裡存在乙個小bug,當二叉樹滿足以上條件可能也不是二叉搜尋樹,例如:如果當前節點作為它的父節點的右孩子,當前節點的左節點小於當前節點,就有可能也小於當前節點的父節點,就不滿足「節點的右子樹只包含大於當前節點的數」這個條件。

正確的思路:判斷二叉樹的中序遍歷是不是嚴格公升序,若是則為二叉搜尋樹,反之不是二叉搜尋樹。

廢話不多說,呈上**:

/**

* definition for a binary tree node.

* struct treenode

* };

*/class solution

return true;

}void midsort(treenode* root, vector&res)

};

二叉搜尋樹 (判斷是否為同一顆搜尋樹)

判斷兩序列是否為同一二叉搜尋樹序列 開始乙個數n,1 n 20 表示有n個需要判斷,n 0 的時候輸入結束。接下去一行是乙個序列,序列長度小於10,包含 0 9 的數字,沒有重複數字,根據這個序列可以構造出一顆二叉搜尋樹。接下去的n行有n個序列,每個序列格式跟第乙個序列一樣,請判斷這兩個序列是否能組...

程式設計練習之一顆二叉樹包含另一顆二叉樹

劍指offer上的一道程式設計練習,如何確定二叉樹a包含一棵相對小一點的二叉樹b?思路 用兩個函式實現,第乙個首先判斷根結點是否相等,第二個函式繼續判斷子結構是否相等 函式一 第一步,首先從根結點入手,判斷proota的值是否與prootb的根結點的值是否相等。若相等,則在比較a樹的子結構是否包含b...

判斷是否是同一顆二叉搜尋樹

給定乙個插入序列就可以唯一確定乙個平衡二叉樹,但是,乙個給定的平衡二叉樹卻可以由不同的插入序列得到。比如按照序列 與序列 插入初始為空的二叉搜尋樹中,將得到相同的二叉平衡樹。強調內容 有一下三種方式 1.建立搜尋樹 根據兩個序列分別建立兩個搜尋樹,在去比較兩個樹是否一樣。2.不建立搜尋樹 首先比較序...