樹,二叉樹,二叉搜索樹算法課程總結:

樹的由來
由單鏈表最大問題查詢太慢O(n)引出跳錶(更快的索引),再想到的思想,就是加速,加速的關鍵在於升維,那麼二維數據結構常見的樹,圖, 樹的出現如果在單鏈表的next有多個的話,就變成了樹
樹(根節點,左子樹,右子樹),
現實生活用的是二叉樹比較多,樹跟圖最關鍵的差別是有無環,如果節點只連到新的兒子節點就是樹,如果節點會與兄弟節點和曾祖父節點連接就是圖
******Lisked List是特殊化的Tree,因爲有兩個Next指針
******Tree是特殊化的Graph(節點只連到新的兒子節點)

樹節點的定義
public class TreeNode {
public int val;
public TreeNode left, right;
public TreeNode(int val) {
this.val = val;
this.left = null;
this.right = null;
}
}

在現實生活中爲什麼會出現樹型結構(比如斐波那契),是因爲人類本身生活在一個三維的世界裏面

二叉樹的遍歷
前序(Pre-order):根-左-右
中序(In-order):左-根-右
後序(Post-order):左-右-根

******不要怕遞歸,embrace擁抱遞歸

二叉搜索樹Binary Search Tree:有序二叉樹
左子樹上所有節點的值均小於它的根節點的值
右子樹上所有節點的值均大於它的根節點的值
以此類推,左,右子樹分別爲二叉查找樹 (******這就是重複項)

中序遍歷:升序排序

二叉搜索樹常見的操作(二叉搜索樹查詢,插入,刪除爲O(logn),二叉樹查詢爲O(n))
1 查詢
2 插入新節點(創建)
3 刪除 刪除關鍵節點,可以從節點左邊的節點找最大的,或者從節點右邊的節點找最小的

特殊情況下,插入的節點都比上一次插入的節點大,就退化變成了鏈表 查詢O(n),那麼如何配平呢
每次插入節點的時候都配成平衡二叉樹,這樣就防止退化爲鏈表的現象

樹爲什麼一般都是遞歸,因爲樹沒有所謂的後繼節點或者便於循環的結構,只能通過左右節點調用相同的函數

遞歸比非遞歸本身慢一點是因爲遞歸要多開一些棧空間,如果遞歸深度很深的話,確實有這樣的問題
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章