二叉查詢樹 例

2021-08-04 09:07:43 字數 2117 閱讀 3362

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 ...