最近在做哈弗曼壓縮,然後就用到了哈夫曼樹啊,自然會涉及到哈夫曼樹的遍歷。於是就找了一些比較棒的例子,給大家分享一下。
一、基本概念
每個結點最多有兩棵子樹,左子樹和右子樹,次序不可以顛倒。
性質:1、非空二叉樹的第n層上至多有2^(n-1)個元素。
2、深度為h的二叉樹至多有2^h-1個結點。
滿二叉樹:所有終端都在同一層次,且非終端結點的度數為2。
在滿二叉樹中若其深度為h,則其所包含的結點數必為2^h-1。
完全二叉樹:除了最大的層次即成為一顆滿二叉樹且層次最大那層所有的結點均向左靠齊,即集中在左面的位置上,不能有空位置。
對於完全二叉樹,設乙個結點為i則其父節點為i/2,2i為左子節點,2i+1為右子節點。
二、二叉樹的遍歷
遍歷即將樹的所有結點訪問且僅訪問一次。按照根節點位置的不同分為前序遍歷,中序遍歷,後序遍歷。
前序遍歷:根節點->左子樹->右子樹
中序遍歷:左子樹->根節點->右子樹
後序遍歷:左子樹->右子樹->根節點
具體的**示例:
class node
// 定義列印哈夫曼樹的方法 前序遍歷
private void printcode_f(node node) else if (node.right != null) }}
// 定義列印哈夫曼樹的方法 中序遍歷
private void printcode_z(node node)
system.out.println(node.c + "[" + node.data + "]" + node.code);
if (node.right != null) }}
// 定義列印哈夫曼樹的方法 後序遍歷
private void printcode_l(node node) else if(node.right!=null)
system.out.println(node.c + "[" + node.data + "]" + node.code);}}
**錯誤,希望指正。
構建二叉樹 遍歷二叉樹
陣列法構建二叉樹 public class main public static void main string args 用陣列的方式構建二叉樹 public static void createbintree 把linkedlist集合轉成二叉樹的形式 for int j 0 j 最後乙個父節...
二叉樹遍歷
二叉樹的遍歷非常重要,但對已一棵比較複雜的樹,要寫出它的先 中 後序遍歷,往往不是那麼簡單,也很容易犯錯。這裡介紹一種比較直觀且不容易犯錯的方法。對於圖1所示的二叉樹,要寫出它的先 中 後序遍歷,往往很容易出錯。圖 1 其實,我們可以用圖2中的紅線描畫出二叉樹的輪廓。圖 2 而對於樹上的每乙個節點,...
二叉樹遍歷
描述 華為實習生招聘,有一道類似如下的題目 給出二叉樹,如圖1所示 圖 1 二叉樹 要求給出中序遍歷的結果。下面分別就前序遍歷 中序遍歷 後序遍歷進行分析。規律 前序遍歷 根在前 子樹在根後且左子樹比右子樹靠前 中序遍歷 根在中 左子樹在根左邊,右子樹在根右邊 後序遍歷 根在後 子樹在根前且左子樹比...