/*********************二叉树的递归插入******************/
template<class Type>
class TreeNode
{
public:
Type data;
TreeNode *left;
TreeNode *right;
TreeNode(Type value, TreeNode *l = nullptr, TreeNode *r = nullptr) :data(value), left(l), right(r){}
};
template<class Type>
class Tree
{
private:
TreeNode<Type> *root;
void visit(TreeNode<Type> *tree);
void insert(Type key, TreeNode<Type> *&leaf);
void preOrder(TreeNode<Type> *tree);
public:
Tree();
~Tree();
void insert(Type key);
void preOrder();
};
template<class Type>
void Tree<Type>::visit(TreeNode<Type> *tree)
{
cout << tree->data << " ";
}
template<class Type>
void Tree<Type>::preOrder(TreeNode<Type> *tree)
{
if (tree != nullptr)
{
visit(tree);
preOrder(tree->left);
preOrder(tree->right);
}
}
template<class Type>
void Tree<Type>::preOrder()
{
preOrder(this->root);
}
template<class Type>
Tree<Type>::Tree()
{
cout << "构造函数" << endl;
this->root = nullptr;
}
template<class Type>
Tree<Type>::~Tree()
{
cout << "析构函数" << endl;
}
//插入节点
template<class Type>
void Tree<Type>::insert(Type key, TreeNode<Type> *&leaf)
{
if (leaf == nullptr)
leaf = new TreeNode<Type>(key, nullptr, nullptr);
else if (key < leaf->data)
insert(key, leaf->left);
else if (key>leaf->data)
insert(key, leaf->right);
}
template<class Type>
void Tree<Type>::insert(Type key)
{
insert(key, this->root);
}
//测试程序
int main()
{
Tree<int> tre;
tre.insert(10);
tre.insert(6);
tre.insert(14);
tre.insert(5);
tre.insert(8);
tre.insert(11);
tre.insert(18);
tre.preOrder();
cout << endl;
return 0;
}
二叉树的递归插入
最新推荐文章于 2022-02-13 14:54:41 发布