題目描述
計算一棵二叉樹的帶權路徑總和,即求赫夫曼樹的帶權路徑和。
已知一棵二叉樹的葉子權值,該二叉樹的帶權案路徑和apl等於葉子權值乘於根節點到葉子的分支數,然後求總和。如下圖中,葉子都用大寫字母表示,權值對應為:a-7,b-6,c-2,d-3
樹的帶權路徑和 = 71 + 62 + 23 + 33 = 34
本題二叉樹的建立參考前面的方法
輸入第一行輸入乙個整數t,表示有t個二叉樹
第二行輸入一棵二叉樹的先序遍歷結果,空樹用字元『0』表示,注意輸入全是英文本母和0,其中大寫字母表示葉子
第三行先輸入n表示有n個葉子,接著輸入n個資料表示n個葉子的權值,權值的順序和前面輸入的大寫字母順序對應
以此類推輸入下一棵二叉樹
輸出輸出每一棵二叉樹的帶權路徑和
樣例輸入
2樣例輸出xa00tb00zc00d00
4 7 6 2 3
ab0c00d00
2 10 20
3440
#include #include using namespace std;
class binode
binode(char e):data(e),lchild(null),rchild(null){}
~binode()
friend class bitree;
};class bitree
void createtree();
void preorder();
void getweight();
};void bitree::createtree(binode *&t,int layer)
}void bitree::createtree()
void bitree::preorder(binode *t)
preorder(t->lchild);
preorder(t->rchild);
}}void bitree::preorder()
}int main()
return 0;
}
DS樹 帶權路徑和
題目描述計算一棵二叉樹的帶權路徑總和,即求赫夫曼樹的帶權路徑和。已知一棵二叉樹的葉子權值,該二叉樹的帶權案路徑和apl等於葉子權值乘於根節點到葉子的分支數,然後求總和。如下圖中,葉子都用大寫字母表示,權值對應為 a 7,b 6,c 2,d 3 樹的帶權路徑和 71 62 23 33 34 本題二叉樹...
Huffman樹的帶權路徑長度
題目描述 給定n個權值 權值均是大於0的正整數 構造赫夫曼樹ht,並求出赫夫曼樹ht的帶權路徑長度。注意 構造赫夫曼樹ht時,在將2棵二叉樹合併成一棵新的二叉樹時,將根結點權值小的用作左子樹!輸入先輸入權值的個數n n 1 然後依次輸入n個權值 權值均是大於0的正整數 輸出輸出構造的赫夫曼樹ht的帶...
哈夫曼樹 哈夫曼樹求帶權路徑和
首先要了解哈夫曼樹的一些概念 帶權路徑 每個葉子結點都有權值,對於某葉子結點來說,它的帶權路徑就是 結點權值 從根節點到該結點的路徑長度 哈夫曼樹的構造方法 兩個權值最小的葉子結點作為兄弟去構成乙個非葉節點。該父親非葉節點的權值 二者之和 之前我只知道這些基本概念,求帶權路徑和的時候也只是 數數 數...