今天學習的是二叉樹的相關知識。二叉樹是樹的一種,因為他每個結點最多只有2個子結點,所以叫做二叉樹。鍊錶實際上很像是樹的特殊情況。二叉樹有很多種,其中著名的就有二叉查詢樹和霍夫曼樹。
[quote]二叉樹在圖論中是這樣定義的:二叉樹是乙個連通的無環圖,並且每乙個頂點的度不大於2。有根二叉樹還要滿足根結點的度不大於2。有了根結點之後,每個頂點定義了唯一的父結點,和最多2個子結點。然而,沒有足夠的資訊來區分左結點和右結點。如果不考慮連通性,允許圖中有多個連通分量,這樣的結構叫做森林。 [/quote]
以下是我的二叉樹的結點類**:
public class tnode
public tnode()
public object getobj()
public void setobj(object obj)
public tnode getparent()
public void setparent(tnode parent)
public tnode getleft()
public void setleft(tnode left)
public tnode getright()
public void setright(tnode right)
}
以下是二叉樹的類(其中實現了將乙個陣列形成二叉查詢樹)
public class binarytree
/*** 重寫二叉樹的構造方法
* * @param obj
*/public binarytree(object obj)
/*** 將整型陣列轉化為一棵二叉查詢樹
* * @param array
* 待轉化的陣列
*/public void arraytotree(int array)
int first = array[0];
root = new tnode(first);
for (int i = 1; i < array.length; i++)
}/**
* 將乙個數以二叉查詢樹的順序插入樹中
* * @param node
* @param value
*/public void addofbst(tnode node, int value) else
}elseelse}}
/*** 以選定模式遍歷列印二叉樹
* * @param node
* 二叉樹起始結點
* @param style
* 模式,1為中左右,0為左中右,-1為左右中
*/public void printtree(tnode node, int style) else if (style == 0) else if (style == -1) }}
}
自定義二叉搜尋樹
public class binarysearchtree private node root insert 1.判斷根節點是否存在,不存在則建立新的根節點 2.根據二叉搜尋樹的性質 左節點 根節點 右節點 進行一種正確的插入方式 public void insert int val node pa...
java自定義二叉樹續 霍夫曼樹和將數學算式建樹
1.霍夫曼樹和霍夫曼編碼 霍夫曼樹即最優二叉樹,因為它每個葉子結點到根結點的距離與葉子結點的權值有關,往往此權值越大,它的路徑越短,即帶權路徑長度要保持最小,所以叫它最優二叉樹。quote 1 設給定的一組權值為,據此生成森林f f 中的每棵二叉樹只有乙個帶權為wi的根節點 i 1,2,n 演算法思...
二叉樹 二叉樹
題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...