二叉树的递归插入

来源:互联网 发布:手机乐器软件 编辑:程序博客网 时间:2024/05/17 08:01
/*********************二叉树的递归插入******************/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;}
0 0
原创粉丝点击