码迷,mamicode.com
首页 > 其他好文 > 详细

二叉树链表的实现: Insert()

时间:2015-02-27 14:54:51      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:

之前我的思路是, 先用一个指针找到合适的位置, 再通过指针把值传进去……然后就陷入多重指针的深渊里了。

后来我的解决方法是递归:

class BinarySearchTree
{
private:
    // do something...

    PTreeNode MakeNewNode (const int32_t& value)
    {
        auto newNode       = make_shared<TreeNode> ();
        newNode->key       = value;
        return move(newNode);
    }

    void InsertIter (PTreeNode& node, const int32_t& value)
    {
        if (node == nullptr) {
            node = MakeNewNode (value);
        }
        else {
            if (node->key < value) {
                InsertIter (node->rightNode, value);
            }
            else {
                InsertIter (node->leftNode, value);
            }
        }
    }
public:
    void Insert (const int32_t& value)
    {
        InsertIter (root, value);
    }

    // other functions...
};

后来在知乎看到了 @坡下碎石 的解答, 深受启发, 有了迭代版本:

struct TreeNode
{

    int32_t              key = 0;
    PTreeNode            leftNode = nullptr;
    PTreeNode            rightNode = nullptr;

    PTreeNode& MoveToNextNode(const int32_t& value)
    {
        return key < value ? rightNode : leftNode;
    }
};

class BinarySearchTree
{
private:
    PTreeNode   root;

    PTreeNode MakeNewNode(const int32_t& value)
    {
        auto newNode = std::make_shared<TreeNode>();
        newNode->key = value;
        return newNode;
    }

public:
    void Insert(const int32_t& value)
    {
        if (root == nullptr)
        {
            root = MakeNewNode(value);
        }
        else
        {
            PTreeNode current = root;
            while (true)
            {
                PTreeNode& p = current->MoveToNextNode(value);
                if (p == nullptr)
                {
                    p = MakeNewNode(value);
                    break;
                }
                current = p;
            }
        }
    }
};

 

二叉树链表的实现: Insert()

标签:

原文地址:http://www.cnblogs.com/wuOverflow/p/4303170.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!