新学习了二叉树这一数据结构,动手实现了一个极为简单的原型,随着以后学习不断完善。
1 #include <iostream> 2 using namespace std; 3 4 struct Node { 5 int data; 6 Node *left; 7 Node *right; 8 9 Node (int data_) { 10 data = data_; 11 left = NULL; 12 right = NULL; 13 } 14 }; 15 16 void insert(Node *&root, int data) { //take care if shoule be Node *&root, or it won't work 17 if (root == NULL) { 18 root = new Node(data); 19 } else if (root->data < data) { 20 insert(root->right, data); 21 } else if (root->data > data) { 22 insert(root->left, data); 23 } else return; 24 } 25 26 void search(Node *root, int target) { 27 if (root == NULL) { 28 cout << "Not found" << endl; 29 } else if (root->data == target) { 30 cout << "result is " << target << endl; 31 } else if (root->data < target) { 32 search(root->right, target); 33 } else if (root->data > target) { 34 search(root->left, target); 35 } 36 } 37 38 void print(int &a) { 39 cout << a << endl; 40 } 41 42 void preOrder(Node *root, void (*visit)(int &)) { 43 if (root != NULL) { 44 (*visit)(root->data); 45 preOrder(root->left, visit); 46 preOrder(root->right, visit); 47 } 48 } 49 50 void inOrder(Node *root, void (*visit)(int &)) { 51 if (root != NULL) { 52 inOrder(root->left, visit); 53 (*visit)(root->data); 54 inOrder(root->right, visit); 55 } 56 } 57 58 void postOrder(Node *root, void (*visit)(int &)) { 59 if (root != NULL) { 60 postOrder(root->left, visit); 61 postOrder(root->right, visit); 62 (*visit)(root->data); 63 } 64 } 65 66 int main() 67 { 68 int size, temp; 69 70 cin >> size; 71 72 Node *root = NULL; 73 74 for (int i = 0; i < size; i++) { 75 cin >> temp; 76 insert(root, temp); 77 } 78 79 cout << "Please input the number you want to search: "; 80 cin >> temp; 81 search(root, temp); 82 83 cout << "preOrder: " << endl; 84 preOrder(root, print); 85 86 cout << "inOrder: " << endl; 87 inOrder(root, print); 88 89 cout << "postOrder: " << endl; 90 postOrder(root, print); 91 92 return 0; 93 }