1.具有n個節(jié)點的樹,有n-1條邊
2.一種樹的實現(xiàn)
每個節(jié)點有一個指向自己第一個孩子的指針,一個指向自己下一個兄弟的指針。
class TreeNode {
Object value;
TreeNode firstChild;
TreeNode nextSibling;
}
3.樹的遍歷方式
主要有三種:先序、后序。
先序:先處理節(jié)點本身,再依次先序遍歷子節(jié)點
后序:先后序遍歷子節(jié)點,再處理節(jié)點本身
二叉樹還有中序遍歷方式:
中序:先中序遍歷子節(jié)點,再處理節(jié)點本身
4.二叉樹
定義:
二叉樹是每個節(jié)點最多只有兩個子節(jié)點的樹
特點:
二叉樹的特點是其深度一般比其節(jié)點數(shù)小很多。許多二叉樹相關(guān)的算法都是因為這個性質(zhì)才有很高的效率。(研究表明二叉樹的平均深度為O根號N;二叉查找樹的的平均深度為OlogN)
特點2:
n個節(jié)點的二叉樹都有n+1個指針指向null。每個節(jié)點2個指針,共2n個。而指向真實節(jié)點的指針只有n-1個,剩下n+1個就指向null啦。
實現(xiàn):
class BinaryNode {
Object value;
BinaryNode leftChild;
BinaryNode rightChild;
}
例題:構(gòu)造表達(dá)式樹
給出一個后綴表達(dá)式,構(gòu)造出一棵表達(dá)式樹。
表達(dá)式樹:樹葉是操作數(shù),根是操作符。
構(gòu)造過程:如果輸入的數(shù)字則壓入棧,如果是操作符則從堆棧里彈出兩項,作為操作符的左右孩子,再把操作符表示的節(jié)點壓入棧里。
二次查找樹
性質(zhì):對于樹中每個節(jié)點X,它的左子樹中所有項的值小于X中的項,而它的右子數(shù)中所有項的值都大于X中的項。
中序遍歷一顆二叉查找樹,就得到了元素的順序輸出。
一種實現(xiàn)
public class BinarySearchTree<T extends Comparable<? super T>> {
private class BinaryNode <T>{
}
}