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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

(Tree)二叉树基本操作

發布時間:2023/12/3 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (Tree)二叉树基本操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
//二叉樹操作#include<iostream> #include<algorithm> using namespace std;//準備數據#define MANLEN 20 typedef char DATA; typedef struct CBT {DATA data;struct CBT*left;struct CBT*right; }CBTT;//初始二叉樹,設置一個根節點CBTT* InitTree() {CBTT* node;if (node = (CBTT*)malloc(sizeof(CBTT))){cout << "請先輸入一個根節點數據: " << endl;cin >> node->data;node->left = nullptr;node->right = nullptr;if (node != nullptr){return node;}else{return nullptr;}return nullptr;} }//添加結點 void AddTreeNode(CBTT* treeNode) {CBTT* pnode, *parent;DATA data;char menusel;if (pnode = (CBTT*)malloc(sizeof(CBTT))){cout << "請輸入要加入的數據: " << endl;cin >> pnode->data;pnode->left = nullptr;pnode->right = nullptr;cout << "請輸入該結點的父結點數據: " << endl;fflush(stdin);cin >> data;parent = TreeFindNode(treeNode, data);if (!parent){cout << "未找到該父節點!" << endl;free(pnode);return;}cout << "1.添加到左子樹 \n 2.添加到右子樹" << endl;do{menusel = getchar();menusel = '0';if (menusel == 1 || menusel == 2){if (parent == nullptr){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);}}//查找結點,先判斷根是否為空然后遞歸查找左右子樹 CBTT* TreeFindNode(CBTT* treeNode, DATA data) {CBTT* ptr;if (treeNode == nullptr){return nullptr;}else{if (treeNode->data == data){return treeNode;}else{if (ptr = TreeFindNode(treeNode->left)){return ptr;}else if (ptr = TreeFindNode(treeNode->right)){return ptr;}else{return nullptr;}}} }//獲取左子樹 CBTT* TreeLeftNode(CBTT* treeNode) {if (treeNode){return treeNode->left;}else{return nullptr;}}//獲取右子樹 CBTT* TreeRightNode(CBTT* treeNode) {if (treeNode){return treeNode->right;}else{return nullptr;}}//計算二叉樹的深度 int TreeDepth(CBTT* treeNode) {int depleft, depright;if (treeNode == nullptr){return 0;}else{depleft = TreeDepth(treeNode->left);depright = TreeDepth(treeNode->right);if (depleft > depright){return depleft + 1;}else{return depright + 1;}} }//清空二叉樹 void ClearTree(CBTT* treeNode) {if (treeNode){ClearTree(treeNode->left);ClearTree(treeNode->right);free(treeNode);treeNode = nullptr;} }//前序遍歷void preorderTrav(CBTT* treeNode) {if (treeNode == nullptr)return;cout << treeNode->data;preorderTrav(treeNode->left);preorderTrav(treeNode->right); }//中序遍歷void preorderTrav(CBTT* treeNode) {if (treeNode == nullptr)return;preorderTrav(treeNode->left);cout << treeNode->data;preorderTrav(treeNode->right); }//后續遍歷void preorderTrav(CBTT* treeNode) {if (treeNode == nullptr)return;preorderTrav(treeNode->left);preorderTrav(treeNode->right);cout << treeNode->data; }//求二叉樹高度 int getTreeHigh(CBTT* root) {if (root == NULL)return 0;int left_high = getTreeHigh(root->left);int right_high = getTreeHigh(root->right);return max(left_high, right_high) + 1; }

?

總結

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

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