C++ 哈夫曼树-所有指向同一位置的指针
我正在写哈夫曼编码算法,指针有问题。这是我的密码:C++ 哈夫曼树-所有指向同一位置的指针,c++,pointers,huffman-code,C++,Pointers,Huffman Code,我正在写哈夫曼编码算法,指针有问题。这是我的密码: TreeNode Algorythm::createATreeAndReturnRoot(){ while (treeNodesList.size() > 1){ sortLeafs(); TreeNode lowestF = treeNodesList.front(); treeNodesList.pop_front(); TreeNode lowestS = treeNodes
TreeNode Algorythm::createATreeAndReturnRoot(){
while (treeNodesList.size() > 1){
sortLeafs();
TreeNode lowestF = treeNodesList.front(); treeNodesList.pop_front();
TreeNode lowestS = treeNodesList.front(); treeNodesList.pop_front();
TreeNode sum = TreeNode(&lowestF, &lowestS);
tree.push_back(lowestF);
tree.push_back(lowestS);
tree.push_back(sum);
treeNodesList.push_back(sum.item);
}
return tree.at(tree.size()-1);
}
和TreeNode构造函数:
TreeNode::TreeNode(TreeNode* leftChild, TreeNode* rightChild)
{
right = rightChild;
left = leftChild;
item.setLetter('?');
item.setLetterCount(leftChild->item.getLetterCount() + rightChild->item.getLetterCount());
}
class TreeNode
{
public:
TreeNode();
TreeNode(TreeNode* leftChild, TreeNode* rightChild);
~TreeNode();
TreeNode::TreeNode(TreeNode* treeNode);
TreeNode::TreeNode(TreeItem treeItem);
bool isLeaf();
bool hasLeftChild();
bool hasRightChild();
bool operator< (TreeNode &other);
TreeItem item;
TreeNode *left;
TreeNode *right;
};
TreeNode::TreeNode(TreeNode*leftChild,TreeNode*righchild)
{
右=右子女;
left=leftChild;
项目.设置字母(“?”);
item.setLetterCount(leftChild->item.getLetterCount()+righchild->item.getLetterCount());
}
三烯类
{
公众:
TreeNode();
TreeNode(TreeNode*左子女,TreeNode*右子女);
~TreeNode();
TreeNode::TreeNode(TreeNode*TreeNode);
TreeNode::TreeNode(TreeItem-TreeItem);
布尔岛();
bool hasleeftchild();
bool hasRightChild();
bool操作员<(TreeNode和其他);
TreeItem项目;
TreeNode*左;
TreeNode*对;
};
最后我有一个树,根有正确的字母计数,但树中所有左右指针都指向同一个位置(根的子节点)。你有这个问题,因为你没有正确使用指针。看,在堆栈上创建两个
TreeNode
,然后获取它们的地址,并使它们成为新节点的子节点。但是,因为它们在堆栈上,所以它们具有相同的地址。因此,所有左、右子项都将指向同一位置
您可能想使用
new
或shared\u ptr
在堆上分配它们,如果我从列表中获得代码中的树节点,我如何使用new操作符?好的,我已经让它工作了。我使用了TreeNode*列表,并提供了与TreeNode*单独的比较功能。然后我按照建议在循环中使用指针,效果很好。谢谢