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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

完全二叉树基本操作(不含遍历)

發布時間:2023/12/3 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 完全二叉树基本操作(不含遍历) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/*準備數據*/#define MANLEN 20 //最大長度 typedef char DATA; //定義元素類型 typedef struct CBT //定義二叉樹結點類型 {DATA data; //元素數據struct CBT* left; //左子樹結點指針struct CBT* right; //右子樹結點指針 }CBTType;/*初始化二叉樹*/ CBTType* InitTree() //初始化二叉樹的根 {CBTType* node;if (node = (CBTType*)malloc(sizeof(CBTType)))//申請內存{cout << "請輸入一個結點的數據: " << endl;cin>> node->data;node->left = NULL;node->right = NULL;if (node != NULL){return node;}else{return NULL;}}return NULL; }/*添加結點*/void AddTreeNode(CBTType* treeNode) {CBTType *pnode, *parent;DATA data;char menusel;if (pnode = (CBTType*)malloc(sizeof(CBTType))){cout << "請輸入二叉樹結點數據: " << endl;fflush(stdin);cin >> pnode->data;pnode->left = NULL;pnode->right = NULL;cout << "請輸入該結點的父結點數據: ";fflush(stdin);cin >> data;parent = TreeFindNode(treeNode, data);if (!parent){cout << "未找到父結點!";free(pnode);return;}cout << ("1.添加該結點到左子樹\n2.添加該結點到右子樹\n");do{menusel = getchar();menusel -= '0';if (menusel == 1 || menusel == 2){if (parent == NULL){cout << "不存在父結點,請先設置父節點!" <<endl;}else{switch (menusel){case 1:if (parent->left){cout << "左子樹結點不為空"<<endl;}else{parent->left = pnode;}break;case 2:if (parent->right){cout << "又子樹結點不為空" << endl;}else{parent->right = pnode;}break;default:cout << "參數無效" << endl;}}}} while (menusel!=1 && menusel!=2);} }/*查找結點*/CBTType* TreeFindNode(CBTType* treenode, DATA data) {CBTType* ptr;if (treenode == NULL){return NULL;}else{if (treenode->data == data){return treenode;}else{if (ptr = TreeFindNode(treenode->left, data)){return ptr;}else if (ptr=TreeFindNode(treenode->right,ENODATA)){return ptr;}else //分別向左右子數遞歸查找{return NULL;}}} }/*獲取左子樹*/CBTType* TreeLeftNode(CBTType* treenode) {if (treenode){return treenode->left;}else{return NULL;} }/*獲取右子樹*/CBTType* TreeLeftNode(CBTType* treenode) {if (treenode){return treenode->right;}else{return NULL;} }/*判斷空樹*/int TreeIsEmpty(CBTType* treenose) {if (treenose){return 0;}else{return 1;} }/*計算二叉樹的深度*/ //計算深度就是就算二叉樹中結點最大的層數,往往需要采用遞歸算法實現int TreeDepth(CBTType* treenode) {int depleft, depright;if (treenode == NULL){return 0;}else{depleft = TreeDepth(treenode->left); //左子樹深度(遞歸調用)depright = TreeDepth(treenode->right); //右子樹深度(遞歸調用)if (depleft > depright){return depleft + 1;}else{return depright + 1;}} }/*清空二叉樹*/ /*使用遞歸*/void ClearTree(CBTType* treenode) {if (treenode){ClearTree(treenode->left); //清空左子樹ClearTree(treenode->right); //清空右子樹free(treenode); //釋放當前結點所占內存treenode = NULL;} }/*顯示結點數據*/ //顯示結點數據就是顯示當前結點的數據void TreeNodeData(CBTType* p) {cout << p->data << endl; } //參數p為帶顯示的結點

?

總結

以上是生活随笔為你收集整理的完全二叉树基本操作(不含遍历)的全部內容,希望文章能夠幫你解決所遇到的問題。

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