日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二叉查找树(二叉排序树)创建,插入,删除操作。

發布時間:2025/5/22 编程问答 69 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二叉查找树(二叉排序树)创建,插入,删除操作。 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

二叉排序樹

  • 二叉排序樹是一個基礎的樹的數據結構。應用許多。
  • 它的特性就是,左孩子小于parent。右孩子大于parent.

尋找節點

尋找節點就是直接依據數值的大小。從root節點開始遍歷,大于當前遍歷節點就向它的右子樹查找,相反則查找它的左子樹。

然后返回。

查找最大最小節點

直接依據root節點,遍歷到最右就是最大節點,遍歷到最左,就是最小節點。

插入節點

插入節點我這里插入的節點都會成為葉子節點。依據大小的關系向下遍歷,遍歷到最后的節點,然后插入就能夠了。

刪除節點

這里刪除節點是相對麻煩一點的。在刪除的節點是一個葉子節點的時候。或者僅僅有一個孩子的時候,那么直接把當前節點刪除讓孩子取代自己的位置就能夠了,在被刪除的節點左右孩子都存在的時候,要刪除當前節點,就須要用自己右子樹的最小節點來取代被刪除的節點。

代碼例如以下

// // main.cpp // BSTree // // Created by Alps on 14-7-31. // Copyright (c) 2014年 chen. All rights reserved. //#include <iostream> #define ElementType intusing namespace std;struct Node; typedef Node* PtrToNode; typedef PtrToNode TreeNode;TreeNode makeEmpty(TreeNode T); int isEmpty(TreeNode T); TreeNode findTree(ElementType X,TreeNode T); TreeNode findMin(TreeNode T); TreeNode findMax(TreeNode T); TreeNode insertTree(ElementType X, TreeNode T); TreeNode deleteTree(ElementType X, TreeNode T);struct Node{ElementType element;TreeNode left;TreeNode right; };TreeNode makeEmpty(TreeNode T){if (T != NULL) {makeEmpty(T->left);makeEmpty(T->right);free(T);}return NULL; }int isEmpty(TreeNode T){return T == NULL; }TreeNode findTree(ElementType X,TreeNode T){if (T == NULL) {return NULL;}if (X < T->element) {return findTree(X, T->left);}else if(X > T->element){return findTree(X, T->right);}else{return T;} }TreeNode findMin(TreeNode T){if (T == NULL) {return NULL;}if (T->left == NULL) {return T;}else{return findMin(T->left);} // return NULL; }TreeNode findMax(TreeNode T){if (T == NULL) {return NULL;}if (T->right == NULL) {return T;}else{return findMax(T->right);} // return NULL; }TreeNode insertTree(ElementType X, TreeNode T){if (T == NULL) {T = (TreeNode)malloc(sizeof(Node));T->element = X;T->left = NULL;T->right = NULL;}else if(X > T->element){T->right = insertTree(X, T->right);}else if(X < T->element){T->left = insertTree(X, T->left);}return T; }TreeNode deleteTree(ElementType X, TreeNode T){TreeNode XNode = findTree(X, T);if (XNode == NULL || T == NULL) {printf("can't find the node is : %d",X);exit(1);}if (X > T->element) {T->right = deleteTree(X, T->right);}else if(X < T->element){T->left = deleteTree(X, T->left);}else{TreeNode tmp;if (T->left && T->right) {tmp = findMin(T->right);T->element = tmp->element;T->right = deleteTree( T->element, T->right);}else{tmp = T;if (T->left == NULL) {T = T->right;}elseif (T->right == NULL) {T = T->left;}free(tmp);}}return T; }void PreOrderTree(TreeNode T){if (T != NULL) {printf("%d ",T->element);PreOrderTree(T->left);PreOrderTree(T->right);} }int main(int argc, const char * argv[]) {TreeNode T = (TreeNode)malloc(sizeof(Node));T = makeEmpty(T);T = insertTree(6, T);T = insertTree(2, T);T =insertTree(8, T);T =insertTree(1, T);T = insertTree(5, T);T =insertTree(3, T);T = insertTree(4, T); // printf("%d\n",T->element);PreOrderTree(T);printf("\n");TreeNode tmp;tmp = findTree(2, T);printf("%d\n",tmp->element);T = deleteTree(2, T);PreOrderTree(T);printf("\n");tmp = findMax(T);printf("%d\n",tmp->element);tmp = findMin(T);printf("%d\n",tmp->element); // std::cout << "Hello, World!\n";return 0; }

總結

以上是生活随笔為你收集整理的二叉查找树(二叉排序树)创建,插入,删除操作。的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。