#includeusing namespace std; //有序二叉树:左子树value小于右子树value struct node; typedef struct tree { struct node* p_node; }; tree; typedef struct node { int val; tree left; tree right; }; node; typedef void (*pfunc_t)(int);//创建函数指针类型,用于指向函数print_cb //树的初始化 void tree_init(tree* p_tree) { p_tree->p_node = NULL;//把树设置为没有节点的空树 } //清除函数 void tree_deinit(tree* p_tree) { if (!p_tree->p_node) { return; } tree_deinit(&(p_tree->p_node->left)); tree_deinit(&(p_tree->p_node->right)); delete(p_tree->p_node); p_tree->p_node = NULL; } //查找函数 tree* tree_search(const tree* p_tree,int val) { if (p_tree->p_node== NULL) { //cout << "第一次节点地址" << endl; return (tree *)p_tree; } if (p_tree->p_node->val == val) { return (tree *)p_tree; } else if (p_tree->p_node->val > val) { return tree_search(&(p_tree->p_node->left), val); } else { return tree_search(&(p_tree->p_node->right), val); } } //插入函数 bool tree_insert(tree* p_tree, int val) { tree* p_tempt = tree_search(p_tree, val); //if (p_tempt->p_node==NULL) //{ // cout << "0" << endl; // return false; //} node* p_node = new node; //p_node = NULL; if (!p_node) { cout << "内存分配失败" << endl; return false; } p_node->val = val; p_node->left.p_node = NULL; p_node->right.p_node = NULL; p_tempt->p_node = p_node;//把动态分布的节点挂在找到的节点上 //cout << "1" << endl; return true; } void print_cb(int val) { cout << val << " "; } //以中序遍历处理树里所有节点的函数 void tree_miter(const tree *p_tree,pfunc_t p_func) { if (!p_tree->p_node) { //cout << "0" << endl; return; } tree_miter(&(p_tree->p_node->left), p_func);//递归调用tree_miter函数处理左子树 p_func(p_tree->p_node->val); tree_miter((&p_tree->p_node->right), p_func); } void test05() { tree tr = { 0 }; tree_init(&tr); tree_insert(&tr, 50); tree_insert(&tr, 25); tree_insert(&tr, 75); tree_insert(&tr, 13); tree_insert(&tr, 37); tree_insert(&tr, 67); tree_insert(&tr, 88); tree_insert(&tr, 7); tree_miter(&tr, print_cb); } int main() { test05(); system("pause"); return 0; }



