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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

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

?

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。