二叉樹初始化及插入
阿新 • • 發佈:2020-12-28
#include<iostream> #include <algorithm> using namespace std; typedef struct treenode { int val; struct treenode* left; struct treenode* right; }*tree; void insert(tree* node, int val) { treenode* temp = NULL; if (!(*node)) { temp = (treenode*)malloc(sizeof(treenode)); temp->val = val; temp->left = NULL; temp->right = NULL; *node = temp; return; } if (val < ((*node)->val)) { insert(&(*node)->left, val); } else if (val > ((*node)->val)) { insert(&(*node)->right, val); } }//插入操作 void through(treenode* node) { if (!node) return; cout << node->val; through(node->left); through(node->right); }//前序遍歷 void throughl(treenode* node) { if (!node) return; throughl(node->left); cout << node->val; throughl(node->right); }//中序遍歷 void througha(treenode* node) { if (!node) return; througha(node->left); througha(node->right); cout << node->val; }//後序遍歷 int deeper(treenode* a) { if (a == NULL) return 0; int m = deeper(a->left); int n = deeper(a->right); if (m > n) return(m + 1); else return(n + 1); }//統計深度 int sumleaf(treenode* a) { if (a == NULL) return 0; else return sumleaf(a->left) + sumleaf(a->right) + 1; }//統計節點 void deltree(treenode* node) { if (node) { deltree(node->left); deltree(node->right); free(node); } }//刪除操作 int main() { treenode* a = NULL; int b[5] = { 3,2,1,4,5 }; for (int i = 0; i < 5; i++) insert(&a, b[i]); through(a); cout << endl; throughl(a); cout << endl; througha(a); int w = deeper(a); int t = sumleaf(a); cout << w<<endl; cout << t << endl; deltree(a); }