二叉樹是每個結點最多有兩個子樹的樹結構。通常子樹被稱作「左子樹」(left subtree)和「右子樹」(right subtree)。二叉樹常被用於實現二叉查詢樹和二叉堆。
1
/ \ 2
3/ \ \
456
二叉樹的遍歷分為深度優先遍歷(dfs)和廣度優先遍歷(bfs),深度遍歷有前(先)序、中序以及後序三種遍歷方法,廣度遍歷即我們尋常所說的層次遍歷
深度優先搜尋屬於圖演算法的一種,英文縮寫為dfs即depth first search.其過程簡要來說是對每乙個可能的分支路徑深入到不能再深入為止,而且每個節點只能訪問一次.
深度優先遍歷圖的方法是,從圖中某頂點v出發:
(1)訪問頂點v;
(2)依次從v的未被訪問的鄰接點出發,對圖進行深度優先遍歷;直至圖中和v有路徑相通的頂點都被訪問;
(3)若此時圖中尚有頂點未被訪問,則從乙個未被訪問的頂點出發,重新進行深度優先遍歷,直到圖中所有頂點均被訪問過為止。
首先訪問根,再先序遍歷左(右)子樹,最後先序遍歷右(左)子樹,js**:
var
postorder
=function
(root)
letdlr
=(root)
=>
res.
push
(root.val)
dlr(root.left)
dlr(root.right)
}dlr
(root)
return res
};
示例結果:[1, 2, 4, 5, 3, 6]
首先中序遍歷左(右)子樹,再訪問根,最後中序遍歷右(左)子樹,js**:
var
postorder
=function
(root)
letldr
=(root)
=>
ldr(root.left)
res.
push
(root.val)
ldr(root.right)
}ldr
(root)
return res
};
示例結果:[4, 2, 5, 1, 3, 6]
首先後序遍歷左(右)子樹,再後序遍歷右(左)子樹,最後訪問根,js**:
var
postorder
=function
(root)
letldr
=(root)
=>
ldr(root.left)
ldr(root.right)
res.
push
(root.val)
}ldr
(root)
return res
};
示例結果:[4, 5, 2, 6, 3, 1]
是最簡便的圖的搜尋演算法之一,英文全稱是breadth first search。 bfs並不使用經驗法則演算法。從演算法的觀點,所有因為展開節點而得到的子節點都會被加進乙個先進先出的佇列中。一般的實驗裡,其鄰居節點尚未被檢驗過的節點會被放置在乙個被稱為 open 的容器中(例如佇列或是鍊錶),而被檢驗過的節點則被放置在被稱為 closed 的容器中。
給定圖g=和乙個可以識別的源結點s,廣度優先搜尋對圖g中的邊進行系統性的探索來發現可以從源結點到達所有節點的路徑。該演算法能夠計算出從源結點s到每個可到達的結點的距離,同時生成一顆廣度優先搜尋樹。該數已源結點s為根節點,包含所有的可能從s到達的點。對於每乙個從源結點s可以達到的jiedianv,在廣度優先搜尋樹裡面從結點s到達結點v的簡單路徑對應的就是s到v的最短路徑。
即按照層次訪問,通常用佇列來做。訪問根,訪問子女,再訪問子女的子女(越往後的層次越低)(兩個子女的級別相同),js**:
var
postorder
=function
(root)
letbfs
=(root, i)
=>if(
!res[i]
) res[i]
.push
(root.val)
bfs(root.left, i +1)
bfs(root.right, i +1)
}bfs
(root,0)
return res
};
示例結果:[[1], [2, 3], [4, 5, 6]] 二叉樹的遍歷 二叉樹遍歷與儲存
在資料結構中,二叉樹是非常重要的結構。例如 資料庫中經常用到b 樹結構。那麼資料庫是如何去單個查詢或者範圍查詢?首先得理解二叉樹的幾種遍歷順序 先序 中序 後序 層次遍歷。先序 根節點 左子樹 右子樹 中序 左子樹 根節點 右子樹 後序 左子樹 右子樹 根節點 按層級 class node if c...
構建二叉樹 遍歷二叉樹
陣列法構建二叉樹 public class main public static void main string args 用陣列的方式構建二叉樹 public static void createbintree 把linkedlist集合轉成二叉樹的形式 for int j 0 j 最後乙個父節...
玩轉二叉樹(二叉樹的遍歷)
時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 給定一棵二叉樹的中序遍歷和前序遍歷,請你先將樹做個鏡面反轉,再輸出反轉後的層序遍歷的序列。所謂鏡面反轉,是指將所有非葉結點的左右孩子對換。這裡假設鍵值都是互不相等的正整數。輸入格式 ...