# 二元樹插入&樹的遍歷 ``` #include<stdlib.h> #include<queue> #include<stdio.h> #include <iostream> using namespace std; struct Node { int data; struct Node* left, *right; /*節點建構函式*/ Node(int data) { this->data = data; left = right = NULL; } }; /*定義節點指標*/ typedef struct Node* NodePointer; #define Insert(r,n){\ if((r)==NULL){\ (r)=new Node(n);\ }else{\ insert((r),(n));\ }\ } void insert(NodePointer root, int key) { if(root->data==key) return ; /*情況2.如果這個值小於樹根*/ if(key<root->data){ /*同時左節點為空*/ if(root->left==NULL){ /*插入節點*/ root->left=new Node(key); return ; }else{ insert(root->left, key); } } /*情況3.如果這個值大於樹根*/ if(key>root->data){ /*同時左節點為空*/ if(root->right==NULL){ /*插入節點*/ root->right=new Node(key); return ; }else{ insert(root->right, key); } } } void printPostorder(struct Node* node) { if (node == NULL) return; printPostorder(node->left); printPostorder(node->right); cout << node->data << " "; } void printInorder(struct Node* node) { if (node == NULL) return; printInorder(node->left); cout << node->data << " "; printInorder(node->right); } void printPreorder(struct Node* node) { if (node == NULL) return; cout << node->data << " "; printPreorder(node->left); printPreorder(node->right); } void del(struct Node* node) { del(node->left); del(node->right); free(node); } int main() { int array[] = {4, 3, 7, 1, 2, 9, 8, 5}; NodePointer root=NULL; /* //第4題 for(int i=0;i<sizeof(array)/4;i++) Insert(root, array[i]); */ //第3題 //General case insert(root->left,key)\insert(root->right, key) root=new Node(34); Insert(root,82) Insert(root,77); Insert(root,40); Insert(root,10); Insert(root,19); Insert(root,92); Insert(root,83); /*前序*/ //printPreorder(root); /*中序*/ //printInorder(root); /*後序*/ //printPostorder(root); del(root); return 0; } ```