简单的二叉树

新学习了二叉树这一数据结构,动手实现了一个极为简单的原型,随着以后学习不断完善。

 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 }

转载于:https://www.cnblogs.com/IT-nerd/p/3477503.html

猜你喜欢

转载自blog.csdn.net/weixin_34124651/article/details/93423708