21xrx.com
2024-11-22 06:38:48 Friday
登录
文章检索 我的文章 写文章
C++如何输出哈夫曼树各结点权值的中序遍历
2023-07-12 02:33:00 深夜i     --     --
C++ 哈夫曼树 结点权值 中序遍历 输出

哈夫曼树是一种常用的数据结构,用于压缩数据。在C++中输出哈夫曼树各结点权值的中序遍历可以使用递归算法。

首先,我们需要定义一个结构体来表示哈夫曼树的结点,结点包含权值weight和左右子节点left和right。定义如下:

struct Node{

  int weight;

  Node *left, *right;

};

接下来,我们可以使用一个vector来存储所有哈夫曼树的结点,然后使用sort函数对它们进行排序,排序的依据是结点的权值从小到大。

vector nodes;//存储哈夫曼树所有结点

//对结点按权值从小到大排序

sort(nodes.begin(), nodes.end(), [](Node a, Node b) return a.weight < b.weight; );

接着,我们可以定义一个递归函数来实现中序遍历。递归函数的参数是当前结点和一个输出流对象,用于输出结点的权值。中序遍历的顺序是先遍历左子树,然后输出当前结点的权值,最后遍历右子树。

void inorderTraversal(Node *cur, ostream& os){

  if(!cur) return;

  inorderTraversal(cur->left, os);

  os << cur->weight << " ";

  inorderTraversal(cur->right, os);

}

最后,我们可以在程序的主函数中调用递归函数来输出哈夫曼树各结点权值的中序遍历。

int main(){

  //构建哈夫曼树

  //...

  //输出各结点权值的中序遍历

  inorderTraversal(root, cout);

  return 0;

}

通过以上的代码,我们就可以非常简单地输出哈夫曼树各结点权值的中序遍历了。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复