二叉樹定義:二叉樹的訪問:每個節點最多含有兩個子樹的樹稱為二叉樹,通常子樹被稱作「左子樹(left subtree)」和「右子樹(right subtree)」,有左右之分,次序不能顛倒;
二叉樹分類:
1.完全二叉樹:對於一棵二叉樹,假設其深度為d(d>1)。除了第d層外,其它各層的節點數目均已達最大值,且第d層所有節點從左向右連續地緊密排列,這樣的二叉樹被稱為完全二叉樹;
2.滿二叉樹:對於上述的完全二叉樹,如果去掉其第d層的所有節點,那麼剩下的部分就構成乙個滿二叉樹(此時該滿二叉樹的深度為d-1);
二叉樹儲存:
連續儲存(以完全二叉樹儲存)
二叉樹可以用陣列或線性表來儲存。如果乙個節點的索引為i,它的子節點能在索引2i+1和2i+2找到,並且它的父節點能在floor((i-1)/2)找到(根節點索引為0)。
鏈式儲存
/** * 二叉樹鏈式儲存的資料結構
*/public class binnode
}
樹的遍歷先序(dlr)、中序(ldr)、後序(lrd)。
先序遍歷:
1、訪問根節點;
2、再先序訪問左子樹;
3、再先序訪問右子樹;
遍歷結果為:1 2 4 8 5 3 6 7
中序遍歷:
1、訪問左子樹;
2、訪問根節點;
3、訪問右子樹;
遍歷結果為:8 4 2 5 1 3 6 7
後序遍歷:
1、訪問右子樹;
2、訪問左子樹;
3、訪問根節點;
遍歷結果為:8 4 5 2 6 7 3 1
已知先序和中序,或者已知中序和後序即可還原原始二叉樹:
例如通過先序和中序求原始二叉樹的思路如下:
1、先序先訪問根節點,通過先序序列可以得出1為樹的根;
2、中序先訪問左子樹,通過中序序列可以得出8 4 2 5 為根左子樹的子孫,3 6 7 為根右子樹的子孫;
3、左子樹8 4 2 5這4個子孫中,子孫2在先序序列中最靠前,可以得出2為左子樹的根;
4、以此類推。
將n叉樹轉換為二叉樹:
將每個節點的左子節點指向他的第乙個孩子節點,右子節點指向他的下乙個兄弟節點。
資料結構之二叉樹
在二叉樹中每個節點最多只能有兩個子節點。即左子節點和有子節點。在二叉樹中最重要的操作應當是遍歷。即按照某一順序訪問二叉樹中的每乙個節點。一般有如下幾種遍歷方法 1 前序遍歷,即先訪問根幾點,然後再訪問左子節點,最後訪問右子節點。2 中序遍歷,即先訪問左子節點,然後再訪問根節點,最後訪問右子節點。3 ...
資料結構之二叉樹
定義 滿足以下條件的就是樹 1.有且僅有乙個特定的稱為根root的結點。2.當n 1時,其餘結點可分為m m 0 個互不相交的有限集,其中每個集合本身又是乙個棵樹,並稱為根的子樹。樹是資料結構中一種常見的資料結構,比如我們排序中常見的二叉樹,紅黑樹等。最常見的是樹形表示法和廣義表表示法。樹的結構示意...
資料結構之二叉樹
來看一下樹的結構 class treenode public treenode string value 首先,為了方便後面看到效果,先手動初始化乙個有4個節點的二叉樹 tree tree new tree treenode root new treenode root treenode node1...