1、二叉查詢樹:左子樹的值小於根結點,右子樹的值大於根結點的樹
二叉查詢樹的中序遍歷結果是從小到大的排序。
前面已經介紹了二叉查詢樹的基本操作,下面通過完整的**來演示一下,會有助於更好的理解。
2、例:將陣列插入為二叉查詢樹,並按照前序、中序、後序遍歷,再刪除乙個結點後中序遍歷輸出。最後銷毀二叉查詢樹
#include
#include
typedef struct treenodenode;//定義結構體
void preorder_tree(node* tree)//前序遍歷
}void midorder_tree(node* tree)//中序遍歷
}void posorder_tree(node* tree)//後序遍歷
}node * find(int x,node* tree)//查詢
node* findmax(node* tree)//遞迴實現 ,查詢最大值
node * findmin(node *tree)//非遞迴實現 ,查詢最小值
return tree;
} node* insert(int x,node* tree)//插入結點
tree->
data
= x;
tree->left = tree->right =
null;
}//開始找插入的位置
else
if(tree->
data
> x)//遞迴插入左子樹
tree->left = insert(x,tree->left);
else
if(tree->
data
< x)//遞迴插入右子樹
tree->right = insert(x,tree->right);
/*else x存在,不做任何操作,返回原樹*/
return tree;
}node* delet(int x,node* tree)//刪除結點
else
if(x > tree->
data)
tree->right = delet(x,tree->right);
else
if(x < tree->
data)
tree->left = delet(x,tree->left);
else
else
//被刪除的有乙個子結點或沒有子結點的
}return tree;
}void destroy_tree(node* tree)//銷毀二叉查詢樹
int main()
; for(int i = 0;i<10;i++)
printf("前序遍歷結果:");
preorder_tree(tree);
printf("\n中序遍歷結果:");
midorder_tree(tree);
printf("\n後序遍歷結果:");
posorder_tree(tree);
printf("\n最小值:");
node *temp = findmin(tree);
printf("%d\n",temp->data);
printf("最大值:");
temp = findmax(tree);
printf("%d\n",temp->data);
printf("請輸入要刪除的結點:");
int num;
scanf("%d",&num);
tree = delet(num,tree);
printf("\n刪除結點後的中序遍歷:");
midorder_tree(tree);
destroy_tree(tree);//銷毀樹
return 0;
}
執行結果:
通過這個簡明的例子,相信對二叉查詢樹有了更深的理解,將分塊的**組合成完整的**,可以檢查**存在的一些問題,也有助於知識點的鞏固。
二叉樹 二叉查詢樹
構建二叉樹,判斷是否為二叉查詢樹,遞迴先序遍歷,非遞迴中序遍歷 include include include include using namespace std 二叉樹結點 struct treenode 鍊錶結點 struct listnode struct tempnodetempnode...
二叉樹 二叉查詢樹
二叉樹 binary tree 一種樹型結構,每個節點最多擁有兩個節點。如下圖 幾種型別的二叉樹 1.full binary tree 每個節點的孩子數 是 0 或者 2.對高度沒有要求。如下圖 2.perfect binary tree 這個就是最完美的樹,顧名思義,所有葉子節點都有相同的深度,並...
樹(樹,二叉樹,二叉查詢樹)
1.定義 n n 0 個結點構成的有限集合。當n 0時,稱為空樹 2.對於任一棵非空樹 n 0 它具備以下性質 1 樹中有乙個稱為 根 root 的特殊結點,用 r 表示 2 其餘結點可分為m m 0 個互不相交的有限集t1,t2,其中每個集合本身又是一棵樹,稱為原來樹的子樹。3.樹的一些性質 1 ...