二叉树每个节点有一个权值,给定一棵二叉树,求权值和最大的值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树每个节点有一个权值,给定一棵二叉树,求权值和最大的值相关的知识,希望对你有一定的参考价值。
给定权值总数有N个,则其哈夫曼树的结点总数为2*N-1;
给定n个权值作为n的叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。
扩展资料
二叉树中的权值就是对叶子结点赋予的一个有意义的数量值。
一棵深度为k,且有2^k-1个节点的二叉树,称为满二叉树。这种树的特点是每一层上的节点数都是最大节点数。而在一棵二叉树中,除最后一层外,若其余层都是满的,并且最后一层或者是满的,或者是在右边缺少连续若干节点,则此二叉树为完全二叉树。
具有n个节点的完全二叉树的深度为floor(log2n)+1。深度为k的完全二叉树,至少有2k-1个叶子节点,至多有2k-1个节点。
参考技术A 给定权值总数有N个,则其哈夫曼树的结点总数为2*N-1;给定n个权值作为n的叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。本回答被提问者采纳 参考技术B 题目没有描述清楚,无法作答。
二叉树的中序遍历和后序遍历 (Ver. I)
题目描述
按中序遍历和后序遍历给出一棵二叉树,求这棵二叉树中叶子节点权值的最小值。
输入保证叶子节点的权值各不相同。
输入
测试数据有多组
对于每组测试数据,首先输入一个整数N (1 <= N <= 10000),代表二叉树有N个节点,接下来的一行输入这棵二叉树中序遍历的结果,最后一行输入这棵二叉树后序遍历的结果
输入一直处理到文件尾(EOF)
对于每组测试数据,首先输入一个整数N (1 <= N <= 10000),代表二叉树有N个节点,接下来的一行输入这棵二叉树中序遍历的结果,最后一行输入这棵二叉树后序遍历的结果
输入一直处理到文件尾(EOF)
输出
对于每组测试数据,输出一个整数,代表二叉树中叶子节点权值最小值
样例输入
7
3 2 1 4 5 7 6
3 1 2 5 6 7 4
8
7 8 11 3 5 16 12 18
8 3 11 7 16 18 12 5
1
255
255
样例输出
1
3
255
提示
#include<iostream> using namespace std; class BitreeNode { public: int data; BitreeNode *left; BitreeNode *right; BitreeNode() { left=right=NULL; } }; class Bitree { public: BitreeNode *Root; int * inorder; int * pastorder; int len; int Min; Bitree(int n,int *i,int *p) { Min=99999; inorder=i; pastorder=p; len=n; Root=makeTree(0,len-1,len-1); } BitreeNode *makeTree(int inleft,int inright,int root) { if(inright<inleft) { return NULL; } int newroot; BitreeNode *T=new BitreeNode(); for(int i=inleft;i<=inright;i++) { if(inorder[i]==pastorder[root]) { newroot=i; break; } } T->data=pastorder[root]; T->left=makeTree(inleft,newroot-1,root-1-(inright-newroot)); T->right=makeTree(newroot+1,inright,root-1); return T; } void Pre(BitreeNode *p) { if(p!=NULL) { if(p->left==NULL&&p->right==NULL) { if(p->data<Min) Min=p->data; } Pre(p->left); Pre(p->right); } } }; int main() { int n; while(cin>>n) { int inorder[10001],pastorder[10001]; for(int i=0;i<n;i++) cin>>inorder[i]; for(int i=0;i<n;i++) cin>>pastorder[i]; Bitree T(n,inorder,pastorder); T.Pre(T.Root); cout<<T.Min<<endl; } return 0; }
以上是关于二叉树每个节点有一个权值,给定一棵二叉树,求权值和最大的值的主要内容,如果未能解决你的问题,请参考以下文章