判斷給定二叉樹是否二叉搜尋樹 C語言

2021-10-25 06:28:24 字數 2031 閱讀 9620

題設要求

(1)函式介面說明:

bool isbst ( bintree t )

;

其中bintree結構定義如下:

typedef

struct tnode *position;

typedef position bintree;

struct tnode

;

函式isbst須判斷給定的t是否二叉搜尋樹,即滿足如下定義的二叉樹:

定義:乙個二叉搜尋樹是一棵二叉樹,它可以為空。如果不為空,它將滿足以下性質:

非空左子樹的所有鍵值小於其根結點的鍵值。

非空右子樹的所有鍵值大於其根結點的鍵值。

左、右子樹都是二叉搜尋樹。

如果t是二叉搜尋樹,則函式返回true,否則返回false。

#include

#include

#define noinfo 0

typedef

enum

bool;

typedef

int elementtype;

typedef

struct tnode *position;

typedef position bintree;

struct tnode

;bintree buildtree()

;/* 由裁判實現,細節不表 */

bool isbst ( bintree t )

;int

main

(int argc,

char

* ar**)

/* 你的**將被嵌在這裡 */

輸入樣例1:如下圖

輸出樣例1:

yes輸入樣例2:如下圖

輸出樣例2:

no

bool isbst ( bintree t )

p=t->right;

if(p)

return true;

}

bintree createbintree()

else

return

null

;//為0,則返回空樹

while(!

isempty

(q))

scanf

("%d"

,&data)

;//輸入t的右子樹資料if(

!data) t->right =

null

;//為0,則t的右子樹為空

else

}return bt;

//迴圈結束,則返回根結點位址

}

該方法建立需要寫相關佇列函式,如下:

struct qnode

;typedef

struct qnode * qnode;

struct queue

;typedef

struct queue *linkqueue;

linkqueue createqueue()

void

addq

(linkqueue q,bintree tree)

else

} bintree deleteq

(linkqueue q)

else

return tree;

}int

isempty

(linkqueue q)

是否二叉搜尋樹——永夜莫明

二叉樹的層序建立&&層序遍歷(c語言)——super__bb

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

剛開始我想的很簡單,覺得只要遞迴判斷左孩子是否小於根節點 右孩子是否大於根節點就行了 二叉搜尋樹 左孩子 根結點 右孩子 根節點 下面的寫法 錯的!錯的!二叉樹的判斷應該是左子樹的最大值 小於 根節點 右子樹的最小值大於根節點 bool isvalidbst treenode root if roo...

判斷給定的二叉樹是否為完全二叉樹

完全二叉樹 complete binary tree 深度為k,有n個結點的二叉樹當且僅當其每乙個結點都與深度為k的滿二叉樹中編號從1到n的結點一一對應時,稱為完全二叉樹。用了兩個輔助方法,遞迴實現,c codes as below class treenode public treenode ri...

判斷二叉樹是否平衡 是否完全二叉樹 是否二叉排序樹

1.判斷二叉樹是否平衡 求樹的高度 int treedepth node t return0 判斷二叉樹是否平衡 int isbalanced node t 2.判斷二叉樹是否相同 判斷兩棵二叉樹是否相同 int comptree node tree1,node tree2 拷貝二叉樹 void c...