首先先介紹一下二叉查詢樹,二叉查詢樹的每個節點,最多只有兩個子樹,通常稱為左子樹和右子樹,且左子樹節點的值一定小於父節點的值,右子樹節點的值一定大於父節點的值,採用這種二叉樹的設計,確實會提高我們索引的效率。時間複雜度(logn)。
且圖上這棵二叉樹,不僅僅是二叉查詢樹,同時也是平衡二叉樹,也就是左右子樹高度的相差不超過1.
從原先遍歷整個集合(時間複雜度為n),變為折半查詢確實提公升了效率,但如果有一種特殊情況,讓我們的二叉樹在從0開始插入的過程中,形成了線性或者近似線性的二叉樹,就會讓時間複雜度無限逼近於n,大大降低查詢效率。
那麼,在這種情況下,我們或許是可以使用自平衡二叉樹(紅黑樹)的旋轉方法,令我們的線性二叉樹經過旋轉,轉變為n的時間複雜度,但是我們會忽略影響效能最關鍵的要素——io。
比如我們在第一張圖里去找6,那麼會發生三次io,分別是,讀取硬碟中儲存的5到記憶體,讀取硬碟中儲存的7到記憶體,讀取硬碟中儲存的6到記憶體。
劍指 重建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。前序 根左右,中序 左根右 題中例子 前序遍歷1為根,中序遍歷的4,7,2即為左子樹,5,3,8,6即為右子樹 左子樹前序遍歷為2,...
重建二叉數 劍指offer
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。二叉樹四種基本的遍歷思想為 前序遍歷 根結點 左子樹 右子樹 中序遍歷 左子樹 根結點 右子樹 後序遍歷 左子樹 右子樹 根結點 層...
劍指 重建二叉樹 )
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。分析 二叉樹的前序遍歷順序是 先訪問根節點,然後前序遍歷左子樹,再前序遍歷右子樹。中序遍歷順序是 中序遍歷根節點的左子樹,然後是訪問...