由於最近總是碰到問二叉樹的,這裡簡單做一下記錄,以供自己忘了的時候回頭看看其實二叉樹的概念倒是蠻簡單的,學計算機的應該都學過,無非就是自身儲存乙個值,儲存下乙個節點的索引,有乙個左子支和乙個右子支,這裡要注意,其本身儲存的值大於左子支值並且小於右子支值。
用js表示節點如下:
function node(value)
其實顯而易見的,其出現一定是為了解決問題,但是解決什麼問題呢?很簡單,當我們資料量巨大到乙個數量級時,我們仍然使用js的陣列或者物件來儲存的時候,所帶來的記憶體花銷是巨大的,不斷的拓展新的記憶體位址,總有乙個極限,並且,一般情況下由於內容的無序性,多數情況下會存在需要排序或者取最大值最小值的情況,當出現這種情況時,二叉樹就派上用上了。
其實一般意義上講無用,我工作這麼久是沒有接觸過需要用到的情況,但是,請注意,面試的時候是可以用來吹牛皮的,因為面試考演算法的時候,多數情況下為數字陣列,這種情況下的排序或者取部分值,如果你直接用迴圈來做的話,總會有些low,而且一般進一步講面試官會要求你優化,或者陣列很長的時候,你就需要它,沒錯。。。我就是面試碰到了,沒想到還經常出現。
function node(val)
function bst()
bst.prototype
.insert = function (data) else
current = current.left
; } else
current = current.right
; }}}
};bst
.prototype
.show = function (node)
if (current.right)
};var bst = new bst();
bst.insert(5);
bst.insert(3);
bst.insert(7);
bst.insert(2);
bst.insert(4);
bst.insert(6);
bst.insert(10);
bst.insert(20);
bst.show();
其實還是蠻簡單的,其主要起到的作用是搜尋起來非常快,比如我們要取最小值
bst
.prototype
.showmin = function (node) else
};
取最大值
bst
.prototype
.showmax = function (node) else
};
由於二叉樹預先已經有了排序,並且資料結構固定,所有比一般的陣列排序要快很多,適合排列數字和字母的情況 二叉樹 二叉樹
題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...
樹 二叉樹 滿二叉樹 完全二叉樹 完滿二叉樹
目錄名稱作用根 樹的頂端結點 孩子當遠離根 root 的時候,直接連線到另外乙個結點的結點被稱之為孩子 child 雙親相應地,另外乙個結點稱為孩子 child 的雙親 parent 兄弟具有同乙個雙親 parent 的孩子 child 之間互稱為兄弟 sibling 祖先結點的祖先 ancesto...
二叉樹,完全二叉樹,滿二叉樹
二叉樹 是n n 0 個結點的有限集合,它或者是空樹 n 0 或者是由乙個根結點及兩顆互不相交的 分別稱為左子樹和右子樹的二叉樹所組成。滿二叉樹 一顆深度為k且有2 k 1個結點的二叉樹稱為滿二叉樹。說明 除葉子結點外的所有結點均有兩個子結點。所有葉子結點必須在同一層上。完全二叉樹 若設二叉樹的深度...