我正在编写霍夫曼编码算法,我的指针有问题。这是我的代码:
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;
};
最后我有一棵树,根有正确的字母数,但树中的所有指针左和右指向同一位置(孩子们的根)。
答案 0 :(得分:0)
您遇到此问题,因为您没有正确使用指针。看,你在堆栈上创建两个TreeNode
,然后你拿走他们的地址,让他们成为新节点的孩子。但是,因为它们处于堆栈状态,所以它们具有相同的地址。所以左右儿童都会指向同一个位置。
您可能希望使用new
或shared_ptr
在堆上分配它们。