# 樹的應用
```
#include <stdlib.h>
#include <queue>
#include <stdio.h>
#include <iostream>
#include <cstring>
using namespace std;
typedef struct Student {
int id;
string name;
} Student;
Student arr[] = {
{ 4, "jack" },
{ 3, "jason" },
{ 7, "jason" },
{ 1, "alex" },
{ 2, "alice" },
{ 9, "hacker" },
{ 8, "cracker" },
{ 5, "jobs" }
};
struct Node {
int id;
string name;
struct Node* left, *right;
/*節點建構函式*/
Node(int id, string name)
{
this->id = id;
this->name = name;
left = right = NULL;
}
};
/*定義節點指標*/
typedef struct Node* NodePointer;
#define Insert(r,id,name){\
if((r)==NULL){\
(r)=new Node(id,name);\
}else{\
insert((r),(id),(name));\
}\
}
#define Insert2(r,id,name){\
if((r)==NULL){\
(r)=new Node(id,name);\
}else{\
insert2((r),(id),(name));\
}\
}
void insert(NodePointer root, int in, string na)
{
if(root->id == in)
return ;
/*情況2.如果這個值小於樹根*/
if(in < root->id) {
/*同時左節點為空*/
if(root->left == NULL) {
/*插入節點*/
root->left = new Node(in, na);
return ;
} else {
insert(root->left, in, na);
}
}
/*情況3.如果這個值大於樹根*/
if(in > root->id) {
/*同時左節點為空*/
if(root->right == NULL) {
/*插入節點*/
root->right = new Node(in, na);
return ;
} else {
insert(root->right, in, na);
}
}
}
void insert2(NodePointer root, int in, string na)
{
int a;
a = na.compare(root->name);
if(a == 0)
return ;
/*情況2.如果這個值小於樹根*/
if(a < 0) {
/*同時左節點為空*/
if(root->left == NULL) {
/*插入節點*/
root->left = new Node(in, na);
return ;
} else {
insert(root->left, in, na);
}
}
/*情況3.如果這個值大於樹根*/
if(a > 0) {
/*同時左節點為空*/
if(root->right == NULL) {
/*插入節點*/
root->right = new Node(in, na);
return ;
} else {
insert(root->right, in, na);
}
}
}
void printInorder(struct Node* node)
{
if (node == NULL)
return;
printInorder(node->left);
cout << node->id << " " << node->name << endl;
printInorder(node->right);
}
int main()
{
NodePointer root = NULL;
NodePointer root2 = NULL;
root = new Node(arr[0].id, arr[0].name);
for(int i = 1; i < 8; i++)
Insert(root, arr[i].id, arr[i].name);
/*中序*/
printInorder(root);
cout << endl;
root = new Node(arr[0].id, arr[0].name);
for(int i = 1; i < 8; i++)
Insert2(root, arr[i].id, arr[i].name);
/*中序*/
printInorder(root);
return 0;
}
```