二叉搜尋樹 bst
非空左子樹的所有鍵值均小於其根節點的鍵值
非空右子樹的所有鍵值均大於其根節點的鍵值
左右子樹均為二叉搜尋樹
最小元素一定在最右子樹;最大元素一定在最左子樹
二叉搜尋樹操作的特別函式
position find(elementtype x,bintree bst)
position findmin(bintree bst)
position findmax(bintree bst)
position insert(elementtype x,bintree bst)
position delete(elementtype x,bintree bst)
二叉搜尋樹操作函式的定義
**如下:
// 二叉樹查詢的尾遞迴
position find
(elementtype x
,bintree bst
)//二叉樹查詢的迭代查詢
position iterfind
(elementtype x
,bintree bst
)return
null
;//查詢失敗
}/*查詢最小元素*/
position findmin
(bintree bst
)/*查詢最大元素*/
position findmax
(bintree bst
)/*插入*/
bintree insert
(elementtype x
,bintree bst
)else
//開始找到要插入的節點
//如果元素x已存在,則什麼都不做
return
bst;
}/*刪除*/
bintree delete
(elementtype x
,bintree bst
)else
return
bst;
}
兩個序列是否對應相同搜尋樹的判別
給定乙個插入序列就可以唯一確定一棵二叉搜尋樹。然而,一棵給定的二叉搜尋樹卻可由多種不同的插入序列得到。例如序列 和插入初始為空的二叉搜尋樹,都能的到同樣的結果。問題:對於輸入的各種插入序列,你需要判斷它們是否能夠生成一樣的二叉搜尋樹?
**如下:
/*搜尋樹的表示*/
typedef struct treenode*tree;
struct treenode
/*建立樹的結點*/
tree newnode
(int v
)//node,結點
/*樹結點的插入*/
tree insert
(tree t
,int v
)returnt;
}/*建立樹:輸入資料,將它加在樹上*/
tree maketree
(int n
)returnt;
}/*判別函式*/
int judge
(tree t
,int n)if
(flag)
return0;
else
return;}
/*結點標記的清除*/
void
resett
(tree t
)//清除t的各結點的flag標記
/*釋放t的空間*/
void
freetree
(tree t
)/*主函式*/
int main()
freetree(t
);//釋放結點空間
scanf
("%d",&
n);}
return0;
}
二叉搜尋樹 二叉搜尋樹
題目 二叉搜尋樹 time limit 2000 1000 ms j a others memory limit 32768 32768 k j a others total submission s 6945 accepted submission s 3077 problem descripti...
二叉搜尋樹 修剪二叉搜尋樹
第一反應是重構,看來別人的解答發現,其實不用重構那麼複雜。treenode trimbst treenode root,int low,int high if root val high 下一層處理完左子樹的結果賦給root left,處理完右子樹的結果賦給root right。root left ...
樹 二叉樹 二叉搜尋樹
給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 13輸出 true 示例 2 輸入 5 14 3 6輸出 false 解釋 輸入為 ...