二叉查詢樹 C

2021-07-25 20:48:41 字數 1862 閱讀 4737

#include "stdafx.h"

#include using namespace std;

/*二叉查詢樹的性質:

1.二叉排序樹或為空樹

2.若左子樹不為空,則左子樹中所有節點的值均小於或等於根節點

3.若右子樹不為空,則右子樹中所有節點的值均大於或等於跟節點

4.左右子樹也為二叉排序樹

(5.二叉排序樹採用中序歷遍(從左到右)輸出的時候是有序的)

*///#define t int

//節點資料結構

templatestruct node

node(k key_,v value_)

node()

{}};

//插入,根節點不能為空,鍵值不可重複 ,插入失敗返回false:(1)鍵值重複(2)引數為null(3)根為空

//插入的節點必須是使用new分配的,因為要採用delete釋放

templatebool insert(node*root, node*node)

//空樹

if(null == root)

//非空樹

node*pointer = root;//指向二叉樹的指標

//找出插入的所在節點

while(true)

else if(node->key > pointer->key)

else

} else

else

} }}//中序歷遍

templatevoid middleprint(const node* const node)

//coutif(null != node->right)

}//查詢 返回null表示沒找到

templatenode* search( node*root, k key)

else if(key > pointer->key)

else

} else

else

} }}//刪除--如果不存在就返回false

templatebool delete_node(node**root, k key)

else

} //如果沒找到就返回false

if(null == p)

return false;

//刪除

//要刪除的節點為根節點

if(*root == p)

//右子樹的左子樹不為空

else

if(p1->right == null)

else

}} }

//葉子節點

else if(null == p->left && null == p->right)

else

}//該節點只有左子樹或又子樹

else if(null == p->left || null == p->right)

else

}//左右子樹皆不為空

else if(p->left != null && p->right != null)

//右子樹的左子樹不為空

else

parent2->left = p1->right;

p1->left = p->left;

p1->right = p->right;

if(parent->left == p)

parent->left = p1;

else

parent->right = p1;

} }if(temp != null)

else

return false;

}int _tmain(int argc, _tchar* argv)

C 二叉查詢樹

二叉排序樹 binary sort tree 又稱二叉查詢樹 binary search tree 亦稱二叉搜尋樹。二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹 1 若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值 2 若右子樹不空,則右子樹上所有結點的值均大於或等於它的根結點...

二叉查詢樹 c

遞迴定義 標頭檔案實現檔案 1.結構體定義 2.查詢函式 3.查詢關鍵值最小的結點 4.查詢關鍵值最大的結點 5.插入函式 6.刪除函式 7.其他函式 makeempty,retrive 二叉查詢樹 binary search tree,bst 在不同的書上我發現也可以叫二叉搜尋樹,二叉排序樹。二叉...

二叉樹 二叉查詢樹

構建二叉樹,判斷是否為二叉查詢樹,遞迴先序遍歷,非遞迴中序遍歷 include include include include using namespace std 二叉樹結點 struct treenode 鍊錶結點 struct listnode struct tempnodetempnode...