編譯環境xCode 5.1
Two.h:
#ifndef __OK__Two__ #define __OK__Two__ #includetypedef struct List{ char name[20]; char desc[200]; int num; List *next; }List; typedef struct myTree{ int data; char stu_name[20]; char desc[200]; int num; myTree *lChild; myTree *rChild; }tree; class listtree { public: void createTree(int,int[],char*[]); void preOrder(tree *);//前序遍歷 void inOrder(tree *);//中序遍歷 void postOrder(tree *);//後序遍歷 myTree *rootNode; }; #endif /* defined(__OK__Two__) */
#include "Two.h"
void listtree::createTree(int count,int num[],char *names[]){
int index = count;
tree *currentNode = NULL;
while (index) {
tree *node = new tree;
int id = count-index;
node->data = num[id];
strcpy(node->stu_name, names[id]);
node->lChild = NULL;
node->rChild = NULL;
if (rootNode==NULL) {
rootNode = node;
}else{
currentNode = rootNode;
tree *thisNode = NULL;
while (currentNode!=NULL) {
thisNode = currentNode;
if (currentNode->data>node->data) {
currentNode = currentNode->lChild;
}else {
currentNode = currentNode->rChild;
}
}
if(node->data>thisNode->data){
thisNode->rChild = node;
}else{
thisNode->lChild = node;
}
currentNode = node;
}
index--;
}
}
void listtree::preOrder(tree *node){
if (node==NULL) {
return;
}
std::cout<data<<"++"<stu_name<<"++"<<"\n";
preOrder(node->lChild);
preOrder(node->rChild);
}
void listtree::inOrder(tree *node){
if (node==NULL) {
return;
}
inOrder(node->lChild);
std::cout<data<<"++"<stu_name<<"++"<<"\n";
inOrder(node->rChild);
}
void listtree::postOrder(tree *node){
if (node==NULL) {
return;
}
postOrder(node->lChild);
postOrder(node->rChild);
std::cout<data<<"++"<stu_name<<"++"<<"\n";
}