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

2021-10-23 17:24:14 字數 1314 閱讀 4759

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

給定一棵二叉樹,已經其中沒有重複值的節點,請判斷該二叉樹是否為搜尋二叉樹和完全二叉樹。

輸入描述:

第一行輸入兩個整數 n 和 root,n 表示二叉樹的總節點個數,root 表示二叉樹的根節點。

以下 n 行每行三個整數 fa,lch,rch,表示 fa 的左兒子為 lch,右兒子為 rch。(如果 lch 為 0 則表示 fa 沒有左兒子,rch同理)

ps:節點的標號就是節點的值

輸出描述:

第一行輸出該二叉樹是否為搜尋二叉樹的答案,如果是則輸出 「true」,否則輸出 「false」。

第二行輸出該二叉樹是否為完全二叉樹的答案,如果是則輸出 「true」,否則輸出 「false」。

備註:1≤n

≤5∗1

05

1 \leq n \leq 5*10^5

1≤n≤5∗

1051≤f

a,lc

h,rc

h,ro

ot≤n

1 \leq fa,lch,rch,root \leq n

1≤fa,l

ch,r

ch,r

oot≤

n 題解:判斷二叉搜尋樹:遞迴進行中序遍歷就行了,二叉搜尋樹的中序遍歷一定是公升序的,可以儲存中序遍歷的前乙個節點和當前節點進行判斷,一旦不滿足直接退出

判斷完全二叉樹:按照以下規則進行:

**:

#include

#include

using

namespace std;

const

int n =

500010

;struct bst bst[n]

;int n, rt;

int fa, lch, rch;

bool

is_bst

(int root,

int& pre)

bool

is_cbt

(int root)

return

true;}

intmain

(void

)int pre =0;

puts

(is_bst

(rt, pre)

?"true"

:"false");

puts

(is_cbt

(rt)

?"true"

:"false");

return0;

}

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

答案 自 由裁判實現,細節不表 bool isbst bintree t intmain 你的 將被嵌在這裡 2這種判斷方法是錯誤的,如下面例子所示,節點4處於根節點3的左子樹中,但是函式檢測到這棵樹是bst.判斷是否為bst 2bool isbst bintree t 36 7 如果是一顆二叉查詢...

判斷一棵二叉樹是否為平衡二叉樹

1.先給出樹節點資訊 typedef struct treetree,bitree 2.原理 判斷一棵樹是否為平衡二叉樹,要滿足每個節點的左右子樹的高度之差的絕對值不大於1。因此,我們這裡可以比較每個節點的左右字數高度,判斷他們差的絕對值是否滿足平衡二叉樹的條件即可 3.演算法 求二叉樹高度演算法 ...

判斷一棵二叉樹是否為平衡二叉樹

題目描述 對輸入的一棵樹,判斷是否為二叉樹。step1 對給定二叉樹的所有節點進行遍歷 step2 將每乙個節點都作為根節點,判斷其左右孩子的深度 step3 使用unordered map記錄下每個節點的深度,最後遍歷每個節點,判斷左右子樹深度之差是否小於等於1 如下 這個直接執行可能有些問題,我...