有没有一种方法可以有效地将位置添加到二叉树中的节点?

时间:2020-03-30 14:20:28

标签: c++ constructor

在下面的C ++代码中,每次调用此函数时,多次调用Position::left()会导致为Node指向的v->left创建多个对象吗?这种内存效率高还是有更好的方法来做到这一点?

struct Node {                   // a node of the tree
          Elem    element;              // element value
          Node*   par;                  // parent
          Node*   left;                 // left child
          Node*   right;                // right child
          Node() : elt(), par(NULL), left(NULL), right(NULL) { } // constructor
        };    

    class Position {
        private:
            Node *v;
        public:
            Position(Node *_v = NULL) : v(_v) {}

            Elem &operator*() { return v->element; }
            Position left() const { return Position(v->left); }
        }

1 个答案:

答案 0 :(得分:0)

Position::left由于使用v->left而不检查是否为空,因此只要被调用,它就会继续。因此,性能比安全性更不重要。

也就是说,您的class Positionstruct Node上做的很少。它似乎不必要(并且实际上最终隐藏了par之类的字段)。

您要在这里完成什么?