通过递归取出树结构所有对应数据

<el-tree
      v-show="true"
      class="filter-tree"
      :props="defaultProps"
      accordion
      node-key="LABEL"
      :default-expanded-keys="[mydata]"
      :data="treedata2"
      :indent="0"
      :check-on-click-node="true"
      @check="setSelectedNode"
      :filter-node-method="filterNode"
      ref="tree2"
    >
     
    </el-tree>
data() {
    return {
    mydata: "",
      searchList: [],
      treedata2: [],
      restaurants: [],
    };
  },
mounted() {
    
    searchPvtreeTwo()
      .then(res => {
        this.treedata2 = res.data.data;
        //取出数据中所有LABEL
        this.setName(this.treedata2);
        if (this.treedata2[0].LABEL) {
          this.mydata = this.treedata2[0].LABEL;
        }
      })
      .catch(res => {});
  },
methods: {
setName(datas) {
      //遍历树  获取label数组
      for (var i in datas) {
        this.searchList.push({ value: datas[i].LABEL });
        if (datas[i].children) {
          this.setName(datas[i].children);
        }
      }
    },
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
哈夫曼是一种特殊的二叉,它的叶子节点对应着要编码的字符,而非叶子节点则对应着编码。哈夫曼的构建过程是基于贪心策略的,即每次选取出现频率最小的两个节点,将它们合并成一个新节点,直到最后形成一棵哈夫曼。以下是一个 C++ 的实现: ```c++ #include <iostream> #include <queue> #include <vector> using namespace std; // 定义哈夫曼节点结构体 struct TreeNode { char data; // 节点存储的字符 int freq; // 节点对应字符出现的频率 TreeNode* left; // 左子节点 TreeNode* right; // 右子节点 TreeNode(char data, int freq) : data(data), freq(freq), left(nullptr), right(nullptr) {} }; // 定义比较函数,用于优先队列的排序 struct cmp { bool operator()(TreeNode* a, TreeNode* b) { return a->freq > b->freq; // 频率小的节点优先级高 } }; // 构建哈夫曼的函数 TreeNode* buildHuffmanTree(vector<char>& chars, vector<int>& freqs) { priority_queue<TreeNode*, vector<TreeNode*>, cmp> pq; // 定义优先队列 for (int i = 0; i < chars.size(); i++) { TreeNode* node = new TreeNode(chars[i], freqs[i]); // 创建节点,存储字符和频率 pq.push(node); // 将节点加入到优先队列中 } while (pq.size() > 1) { // 只要队列中还有两个及以上的节点 TreeNode* left = pq.top(); // 取出频率最小的节点 pq.pop(); TreeNode* right = pq.top(); // 取出频率次小的节点 pq.pop(); TreeNode* parent = new TreeNode('$', left->freq + right->freq); // 新建一个父节点 parent->left = left; // 将左子节点挂到父节点下面 parent->right = right; // 将右子节点挂到父节点下面 pq.push(parent); // 将新建的父节点加入到队列中 } return pq.top(); // 队列中最后剩下的节点即为根节点 } // 递归打印哈夫曼的编码 void printHuffmanCode(TreeNode* root, string code) { if (!root) return; // 递归结束条件 if (root->data != '$') { // 如果是叶子节点,输出对应字符和编码 cout << root->data << " " << code << endl; } printHuffmanCode(root->left, code + "0"); // 递归处理左子 printHuffmanCode(root->right, code + "1"); // 递归处理右子 } int main() { vector<char> chars = {'a', 'b', 'c', 'd', 'e', 'f'}; vector<int> freqs = {5, 9, 12, 13, 16, 45}; TreeNode* root = buildHuffmanTree(chars, freqs); printHuffmanCode(root, ""); return 0; } ``` 输出结果: ``` f 0 c 100 d 101 a 1100 b 1101 e 111 ``` 以上代码中,`buildHuffmanTree` 函数用于构建哈夫曼,它使用了优先队列(堆)来维护频率最小的两个节点,不断合并成为新的节点,直到最后形成一棵哈夫曼。`printHuffmanCode` 函数用于递归打印哈夫曼的编码,其中传入的 `code` 参数表示当前节点的编码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值