由於陣列和鍊錶在使用過程中檢索,刪除新增會出現一些效率低的問題,樹儲存方式可以大大提高檢索速度,同時又
保證了資料的插入,刪除修改速度
二叉樹常用術語
節點:二叉樹連線的各個部分
根節點:沒有父節點的節點
子節點:相對于父節點來說的節點
葉子節點:沒有子節點的節點
節點的權:節點值
路徑:從根節點開始找到該節點的路線
層:根節點為第一層,以此類推
子樹:以子節點為根節點的樹是相對于父節點的字樹
樹的高度:最大層數
森林:多顆子樹共同組成
二叉樹:每個節點最多有兩個子節點
滿二叉樹:二叉樹的所有葉子節點都在最後一層且節點總數為2
^n-1
,n為層數
完全二叉樹:二叉樹所有葉子節點都在最後一層或倒數第二層,而且最後一層葉子節點在左邊連續,倒數第二層葉子
節點在右邊連續
前序:先訪問父節點,再遞迴訪問左子節點(如果存在)
,最後遞迴訪問右子節點
中序:先遞迴訪問左子節點(如果存在)
,再訪問父節點,最後遞迴訪問右子節點
後序:先遞迴訪問左子節點(如果存在)
,在遞迴訪問右子節點,最後訪問父節點
**示例
** 二叉樹節點類
//二叉樹節點
public
class
binarytreenode
@override
public string tostring()
';}//前序
public
void
pre()if
(this
.right != null)
}//中序
public
void
mid(
) system.out.
println
(this);
if(this
.right != null)
}//後序
public
void
post()
if(this
.right != null)
system.out.
println
(this);
}//前序查詢
public binarytreenode preselect
(int id)
//沒找到就向左遞迴if(
this
.left != null)
if(node != null)
//向右遞迴if(
this
.right != null)
return node;
}//中序查詢
public binarytreenode midselect
(int id)
if(node != null)
system.out.
println
("ok");
if(this
.right != null)if(
this
.id == id)
return node;
}//後序查詢
public binarytreenode postselect
(int id)
if(node != null)if(
this
.right != null)
if(node != null)
system.out.
println
("ok");
if(this
.id == id)
return node;
}//節點刪除,如果不是葉子節點,直接刪除子樹
//因為是單向,所有只能通過父節點先判斷子節點是否是需要刪除的節點,如果不是再分別向兩邊遞迴
public
void
del(
int id)if(
this
.right != null &&
this
.right.id == id)
//如果不是就分別以左右節點為根節點繼續向兩邊遞迴if(
this
.left != null)if(
this
.right != null)}}
** 二叉樹類
//二叉樹
public
class
binarytree
else
}//中序遍歷
public
void
mid(
)else
}//後序遍歷
public
void
post()
else
}//前序查詢
public binarytreenode preselect
(int id)
else
}//中序查詢
public binarytreenode midselect
(int id)
else
}//後序查詢
public binarytreenode postselect
(int id)
else
}//刪除節點
public
void
del(
int id)
else
else}}
}** 測試類
public
class
binarytreetest
else
binarytreenode res2 = binarytree.
midselect(4
);if(res==null)
else
binarytreenode res3 = binarytree.
postselect(4
);if(res==null)
else
//刪除
binarytree.
del(4)
; binarytree.
pre();
}}
資料結構演算法爬坑日記一
線性結構 最常用的資料結構,特點是資料元素之間存在一對一的線性關係 分倆種儲存結構 1.順序儲存結構 又稱為順序表,儲存元素是連續的 2.鏈式儲存結構 又稱為鍊錶,儲存元素不一定是連續的,元素節點中存放資料元素以及相鄰元素的位址結構 常見線性資料結構 陣列 佇列 鍊錶 棧 非線性結構 常見二維陣列 ...
資料結構演算法爬坑日記六
回溯法 也叫向前試探法,試著尋找正確的求解,當探索到某一步不符合規則時,便回退到上一步進行重新選擇,直到獲取預期的解法 問題描述 在8 8的西洋棋棋盤上,放置八個皇后且八個皇后不能互相攻擊 思路 先將第乙個放在第一行第一列,然後將第二個放在第二行第一列,檢查是否滿足規則,如果滿足則進入第三個的放 置...
資料結構演算法爬坑日記八
思想 通過一次排序將一組資料分為兩部分,一部分全部比另一部分小,然後對兩部分分別再進行快排,迴圈此操作,直到不能再分割,便得到乙個有序序列 實現 快速排序 public class quicksort sort arr,0,arr.length 1 system.out.println arrays...