두 갈래 트리 체인 테이블의 구현: Insert()

4406 단어 insert
이전에 나의 사고방식은 먼저 바늘로 적당한 위치를 찾은 다음에 바늘을 통해 값을 전달하고... 그리고 다중 바늘의 구렁텅이에 빠지는 것이다.
나중에 나의 해결 방법은 차례차례 돌아오는 것이다.
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; } } } };

좋은 웹페이지 즐겨찾기