tree.h(存放函数声明):
#pragma once
#include<vector>
#include<iostream>
using namespace std;
typedef struct BiTree {
int key;
BiTree* left;
BiTree* right;
BiTree* parent;
}BiTree;
BiTree* createBiNode();
BiTree* &Insert(BiTree* &root, BiTree* node);
void midTrav(BiTree* root);
void preTrav(BiTree* root);
void lastTrav(BiTree* root);
void midTrav_notRe(BiTree* root);
void preTrav_notRe(BiTree* root);
void lastTrav_notRe(BiTree* root);
BiTree* maxValue(BiTree* root);
BiTree* minValue(BiTree* root);
BiTree* findNode(BiTree* root, int value);
BiTree* predecessorNode(BiTree* root, int value);
BiTree* successorNode(BiTree* root, int value);
BiTree* deleteNode(BiTree* root, int value);
void swap(int& a, int& b);
void Perm(vector<int> vec, int b, int e);
BiTree* createBiNodeTest(int value);
int factorial(int n);
void testDelete();
tree.cpp(存放函数实现):
#include"tree.h"
#include<iostream>
#include<stack>
#include<Windows.h>
#include<conio.h>
using namespace std;
BiTree* createBiNode() {
BiTree* node = new BiTree;
node->left = node->right = node->parent = NULL;
cout << "输入新结点key值:";
cin >> node->key;
return node;
}
BiTree* &Insert(BiTree* &root, BiTree* node) {
BiTree* parent = NULL;
BiTree* child = root;
while (child) {
parent = child;
child = node->key < child->key ? child->left : child->right;
}
node->parent = parent;
if (!parent)
root = node;
else if (node->key < parent->key)
parent->left = node;
else
parent->right = node;
return root;
}
void midTrav(BiTree* root) {
if (root) {
midTrav(root->left);
cout << root->key << " ";
midTrav(root->right);
}
}
void preTrav(BiTree* root) {
if (root) {
cout << root->key << " ";
preTrav