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

2021-10-25 01:14:06 字數 672 閱讀 5643

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

/**

* definition for a binary tree node.

* public class treenode

* }*/class solution

stackstack = new stack<>();

treenode cur = root;

integer lastnum = null;

while(!stack.isempty() || cur != null)

cur = stack.pop();

if(lastnum != null && cur.val <= lastnum)

lastnum = cur.val;

cur = cur.right;

}return true;

}}

細節:利用integer包裝類來保留上一次遍歷到的值

時間複雜度o(n):n為二叉樹的節點個數,每個節點最多被訪問一次。

空間複雜度o(n):棧最多儲存 nn 個節點,因此需要額外的 o(n)o(n) 的空間。

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

二叉樹中序遍歷的情況下,遍歷結果是所有節點依次公升序的,就是搜尋二叉樹,否則就不是。由此我們可以對之前非遞迴版本的中序遍歷稍加修改,在列印節點的時機判斷當前節點是否大於上乙個節點,就可以判斷此二叉樹是否是搜尋二叉樹。1中序遞迴遍歷二叉樹,將結果儲存進乙個stack 2比較大小,棧頂為大,棧頂為小。i...

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

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

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

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