二叉樹的Python實現(xiàn)

樹的定義與基本術語

??樹型結構是一類重要的非線性數(shù)據(jù)結構崖叫,其中以樹和二叉樹最為常用,是以分支關系定義的層次結構拍柒。樹結構在客觀世界中廣泛存在心傀,如人類社會的族譜和各種社會組織機構;在計算機領域中也有廣泛應用拆讯,如在編譯程序中脂男,可用樹來表示源程序的語法結構养叛;在數(shù)據(jù)庫系統(tǒng)中,樹型結構也是信息的重要組織形式之一宰翅;在機器學習中弃甥,決策樹,隨機森林汁讼,GBDT等是常見的樹模型淆攻。

??樹(Tree)是n(n≥0)n(n≥0)個結點的有限集。在任意一棵樹中:(1)有且僅有一個特定的稱為根(Root)的節(jié)點嘿架;(2)當n>1n>1時瓶珊,其余節(jié)點可分為m(m>0)m(m>0)個互不相交的有限集T1,T2,...,Tm,T1,T2,...,Tm,其中每一個集合本身又是一棵樹,并且稱為根的子樹(SubTree)眶明。

??在圖1艰毒,該樹一共有13個節(jié)點,其中A是根搜囱,其余節(jié)點分成3個互不相交的子集:T1={B,E,F,K,L}T1={B,E,F,K,L},T2={C,G}T2={C,G},T3={D,H,I,J,M}T3={D,H,I,J,M};T1,T2和T3T1,T2和T3都是根A的子樹丑瞧,且本身也是一棵樹。例如T1T1蜀肘,其根為B绊汹,其余節(jié)點分為兩個互不相交的子集;T11={E,K,L}T11={E,K,L},T12={F}T12={F}扮宠。T11T11和T12T12都是B的子樹西乖。而在T11T11中E是根,{K}{K}和{L}{L}是E的兩棵互不相交的子樹坛增,其本身又是只有一個根節(jié)點的樹获雕。

??接下來講一下樹的基本術語。

??樹的結點包含一個數(shù)據(jù)元素及若干指向其子樹的分支收捣。節(jié)點擁有的子樹數(shù)量稱為節(jié)點的度(Degree)届案。在圖1中,A的度為3罢艾,B的度為2楣颠,C的度為1,F(xiàn)的度為0咐蚯。度為0的結點稱為葉子(Leaf)結點童漩。在圖1中,K,L,F,G,M,I,J都是該樹的葉子春锋。度不為0的結點稱為分支結點矫膨。樹的度是指樹內(nèi)個結點的度的最大值。

??結點的子樹的根稱為該結點的孩子(Child),相應地豆拨,該結點稱為孩子的雙親(Parent)直奋。在圖1,中,D是A的孩子施禾,A是D的雙親。同一個雙親的孩子之間互稱兄弟(Sibling)搁胆。在圖1中弥搞,H,I,J互為兄弟。結點的祖先是從根到該結點所經(jīng)分支上的所有結點渠旁。在圖1中攀例,M的祖先為A,D,H。對應地顾腊,以某結點為根的子樹中的任一結點都稱為該結點的子孫粤铭。在圖1中,B的子孫為E,F,K,L杂靶。

??樹的層次(Level)是從根開始梆惯,根為第一層,根的孩子為第二層等吗垮。雙親在同一層的結點互為同兄弟垛吗,在圖1中,K,L,M互為堂兄弟烁登。樹中結點的最大層次稱為樹的深度(Depth)或高度怯屉,在圖1中,樹的深度為4饵沧。

??如果將樹中結點的各子樹看成從左到右是有次序的(即不能交換)锨络,則稱該樹為有序樹,否則為無序樹狼牺。

森林(Forest)是m(m≥0)m(m≥0)棵互不相交的樹的集合羡儿。對樹中每個結點而言,其子樹的集合即為森林锁右。在機器學習模型中失受,決策樹為樹型結構,而隨機森林為森林咏瑟,是由若干決策樹組成的森林拂到。

二叉樹的定義與基本性質(zhì)

二叉樹(Binary Tree)是一種特殊的樹型結構,它的特點是每個結點至多有兩棵子樹(即二叉樹中不存在度大于2的結點)码泞,且二叉樹的子樹有左右之分兄旬,其次序不能任意顛倒(有序樹)。

??根據(jù)二叉樹的定義,其具有下列重要性質(zhì):(這里不給出證明领铐,證明細節(jié)可參考清華大學出版社 嚴蔚敏 吳偉民的《數(shù)據(jù)結構(C語言版)》)

性質(zhì)1)在二叉樹的第ii層上至多有2i?12i?1個結點(i≥1)(i≥1)悯森。

性質(zhì)2)深度為kk的二叉樹至多有2k?12k?1個結點(k≥1)(k≥1)。

性質(zhì)3)對任何一棵二叉樹绪撵,如果其葉子節(jié)點數(shù)為n0n0,度為2的結點數(shù)為n2n2瓢姻,則n0=n2+1n0=n2+1。

??一棵深度為kk且有2k?12k?1個結點的二叉樹稱為滿二叉樹音诈。深度為kk幻碱,結點數(shù)數(shù)nn的二叉樹,當且僅當其每一個結點都與深度為kk的滿二叉樹中編號為1至n的結點一一對應時细溅,稱之為完全二叉樹褥傍。在下圖2中,(a)為滿二叉樹喇聊,(b)為完全二叉樹恍风。

??下面介紹完全二叉樹的兩個特性:

性質(zhì)4)具有nn個結點的完全二叉樹的深度為[log2n]+1[log2n]+1,其中[x][x]表示不大于x的最大整數(shù)。

性質(zhì)5)如果對一棵有n個結點的完全二叉樹的結點按層序編號(從第一層到最后一層誓篱,每層從左到右)朋贬,則對任一結點i(1≤i≤n)i(1≤i≤n),有:

(1)如果i=1,則結點i是二叉樹的根燕鸽,無雙親兄世;如果i>1,則其雙親結點為[1/2]。

(2)如果2i>n啊研,則結點i無左孩子御滩;否則其左孩子是結點2i。

(3)如果2i+1>n党远,則結點i無右孩子削解;否則其右孩子是結點2i+1。

??介紹完了二叉樹的定義及基本性質(zhì)沟娱,接下來氛驮,我們需要了解二叉樹的遍歷。所謂二叉樹的遍歷济似,指的是如何按某種搜索路徑巡防樹中的每個結點矫废,使得每個結點均被訪問一次,而且僅被訪問一次砰蠢。對于二叉樹蓖扑,常見的遍歷方法有:先序遍歷,中序遍歷台舱,后序遍歷律杠,層序遍歷。這些遍歷方法一般使用遞歸算法實現(xiàn)。

先序遍歷的操作定義為:若二叉樹為空柜去,為空操作灰嫉;否則(1)訪問根節(jié)點;(2)先序遍歷左子樹嗓奢;(3)先序遍歷右子樹讼撒。

中序遍歷的操作定義為:若二叉樹為空,為空操作股耽;否則(1)中序遍歷左子樹椿肩;(2)訪問根結點;(3)中序遍歷右子樹豺谈。

后序遍歷的操作定義為:若二叉樹為空,為空操作贡这;否則(1)后序遍歷左子樹茬末;(2)后序遍歷右子樹;(3)訪問根結點盖矫。

層序遍歷的操作定義為:若二叉樹為空丽惭,為空操作;否則從上到下辈双、從左到右按層次進行訪問责掏。

??如對于下圖3,

其先序遍歷湃望、中序遍歷换衬、后序遍歷、層序遍歷的結果為:

先序遍歷為:

18 7 3 4 11 5 1 3 6 2 4

中序遍歷為:

3 7 4 18 1 5 3 11 2 6 4

后序遍歷為:

3 4 7 1 3 5 2 4 6 11 18

層序遍歷為:

[[18], [7, 11], [3, 4, 5, 6], [1, 3, 2, 4]]

??關于二叉樹的存儲結構证芭,可以選擇鏈式存儲結構瞳浦。用于表示二叉樹的鏈表中的結點至少包含3個域:數(shù)據(jù)域和左、右指針废士。下面會給出如何利用利用鏈式存儲結構實現(xiàn)二叉樹(Python實現(xiàn))叫潦。

二叉樹的Python實現(xiàn)

??了解了二叉樹的基本情況后,筆者使用Python實現(xiàn)了二叉樹官硝,其完整的Python代碼(Binary_Tree.py)如下:

from graphviz import Digraph

import uuid

from random import sample

# 二叉樹類

class BTree(object):

? ? # 初始化

? ? def __init__(self, data=None, left=None, right=None):

? ? ? ? self.data = data? ? # 數(shù)據(jù)域

? ? ? ? self.left = left? ? # 左子樹

? ? ? ? self.right = right? # 右子樹

? ? ? ? self.dot = Digraph(comment='Binary Tree')

? ? # 前序遍歷

? ? def preorder(self):

? ? ? ? if self.data is not None:

? ? ? ? ? ? print(self.data, end=' ')

? ? ? ? if self.left is not None:

? ? ? ? ? ? self.left.preorder()

? ? ? ? if self.right is not None:

? ? ? ? ? ? self.right.preorder()

? ? # 中序遍歷

? ? def inorder(self):

? ? ? ? if self.left is not None:

? ? ? ? ? ? self.left.inorder()

? ? ? ? if self.data is not None:

? ? ? ? ? ? print(self.data, end=' ')

? ? ? ? if self.right is not None:

? ? ? ? ? ? self.right.inorder()

? ? # 后序遍歷

? ? def postorder(self):

? ? ? ? if self.left is not None:

? ? ? ? ? ? self.left.postorder()

? ? ? ? if self.right is not None:

? ? ? ? ? ? self.right.postorder()

? ? ? ? if self.data is not None:

? ? ? ? ? ? print(self.data, end=' ')

? ? # 層序遍歷

? ? def levelorder(self):

? ? ? ? # 返回某個節(jié)點的左孩子

? ? ? ? def LChild_Of_Node(node):

? ? ? ? ? ? return node.left if node.left is not None else None

? ? ? ? # 返回某個節(jié)點的右孩子

? ? ? ? def RChild_Of_Node(node):

? ? ? ? ? ? return node.right if node.right is not None else None

? ? ? ? # 層序遍歷列表

? ? ? ? level_order = []

? ? ? ? # 是否添加根節(jié)點中的數(shù)據(jù)

? ? ? ? if self.data is not None:

? ? ? ? ? ? level_order.append([self])

? ? ? ? # 二叉樹的高度

? ? ? ? height = self.height()

? ? ? ? if height >= 1:

? ? ? ? ? ? # 對第二層及其以后的層數(shù)進行操作, 在level_order中添加節(jié)點而不是數(shù)據(jù)

? ? ? ? ? ? for _ in range(2, height + 1):

? ? ? ? ? ? ? ? level = []? # 該層的節(jié)點

? ? ? ? ? ? ? ? for node in level_order[-1]:

? ? ? ? ? ? ? ? ? ? # 如果左孩子非空矗蕊,則添加左孩子

? ? ? ? ? ? ? ? ? ? if LChild_Of_Node(node):

? ? ? ? ? ? ? ? ? ? ? ? level.append(LChild_Of_Node(node))

? ? ? ? ? ? ? ? ? ? # 如果右孩子非空,則添加右孩子

? ? ? ? ? ? ? ? ? ? if RChild_Of_Node(node):

? ? ? ? ? ? ? ? ? ? ? ? level.append(RChild_Of_Node(node))

? ? ? ? ? ? ? ? # 如果該層非空氢架,則添加該層

? ? ? ? ? ? ? ? if level:

? ? ? ? ? ? ? ? ? ? level_order.append(level)

? ? ? ? ? ? # 取出每層中的數(shù)據(jù)

? ? ? ? ? ? for i in range(0, height):? # 層數(shù)

? ? ? ? ? ? ? ? for index in range(len(level_order[i])):

? ? ? ? ? ? ? ? ? ? level_order[i][index] = level_order[i][index].data

? ? ? ? return level_order

? ? # 二叉樹的高度

? ? def height(self):

? ? ? ? # 空的樹高度為0, 只有root節(jié)點的樹高度為1

? ? ? ? if self.data is None:

? ? ? ? ? ? return 0

? ? ? ? elif self.left is None and self.right is None:

? ? ? ? ? ? return 1

? ? ? ? elif self.left is None and self.right is not None:

? ? ? ? ? ? return 1 + self.right.height()

? ? ? ? elif self.left is not None and self.right is None:

? ? ? ? ? ? return 1 + self.left.height()

? ? ? ? else:

? ? ? ? ? ? return 1 + max(self.left.height(), self.right.height())

? ? # 二叉樹的葉子節(jié)點

? ? def leaves(self):

? ? ? ? if self.data is None:

? ? ? ? ? ? return None

? ? ? ? elif self.left is None and self.right is None:

? ? ? ? ? ? print(self.data, end=' ')

? ? ? ? elif self.left is None and self.right is not None:

? ? ? ? ? ? self.right.leaves()

? ? ? ? elif self.right is None and self.left is not None:

? ? ? ? ? ? self.left.leaves()

? ? ? ? else:

? ? ? ? ? ? self.left.leaves()

? ? ? ? ? ? self.right.leaves()

? ? # 利用Graphviz實現(xiàn)二叉樹的可視化

? ? def print_tree(self, save_path='./Binary_Tree.gv', label=False):

? ? ? ? # colors for labels of nodes

? ? ? ? colors = ['skyblue', 'tomato', 'orange', 'purple', 'green', 'yellow', 'pink', 'red']

? ? ? ? # 繪制以某個節(jié)點為根節(jié)點的二叉樹

? ? ? ? def print_node(node, node_tag):

? ? ? ? ? ? # 節(jié)點顏色

? ? ? ? ? ? color = sample(colors,1)[0]

? ? ? ? ? ? if node.left is not None:

? ? ? ? ? ? ? ? left_tag = str(uuid.uuid1())? ? ? ? ? ? # 左節(jié)點的數(shù)據(jù)

? ? ? ? ? ? ? ? self.dot.node(left_tag, str(node.left.data), style='filled', color=color)? ? # 左節(jié)點

? ? ? ? ? ? ? ? label_string = 'L' if label else ''? ? # 是否在連接線上寫上標簽傻咖,表明為左子樹

? ? ? ? ? ? ? ? self.dot.edge(node_tag, left_tag, label=label_string)? # 左節(jié)點與其父節(jié)點的連線

? ? ? ? ? ? ? ? print_node(node.left, left_tag)

? ? ? ? ? ? if node.right is not None:

? ? ? ? ? ? ? ? right_tag = str(uuid.uuid1())

? ? ? ? ? ? ? ? self.dot.node(right_tag, str(node.right.data), style='filled', color=color)

? ? ? ? ? ? ? ? label_string = 'R' if label else ''? # 是否在連接線上寫上標簽,表明為右子樹

? ? ? ? ? ? ? ? self.dot.edge(node_tag, right_tag, label=label_string)

? ? ? ? ? ? ? ? print_node(node.right, right_tag)

? ? ? ? # 如果樹非空

? ? ? ? if self.data is not None:

? ? ? ? ? ? root_tag = str(uuid.uuid1())? ? ? ? ? ? ? ? # 根節(jié)點標簽

? ? ? ? ? ? self.dot.node(root_tag, str(self.data), style='filled', color=sample(colors,1)[0])? ? # 創(chuàng)建根節(jié)點

? ? ? ? ? ? print_node(self, root_tag)

? ? ? ? self.dot.render(save_path)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # 保存文件為指定文件

??在上述代碼中达箍,筆者創(chuàng)建了二叉樹類BTree没龙,實現(xiàn)了如下方法:

初始化方法:該樹存放的數(shù)據(jù)為data,左子樹,右子樹為left和right,默認均為None;

preorder()方法:遞歸實現(xiàn)二叉樹的先序遍歷硬纤;

inorder()方法:遞歸實現(xiàn)二叉樹的中序遍歷解滓;

postorder()方法:遞歸實現(xiàn)二叉樹的后序遍歷;

levelorder()方法:遞歸實現(xiàn)二叉樹的層序遍歷筝家;

height()方法:計算二叉樹的高度洼裤;

leaves()方法:計算二叉樹的葉子結點;

print_tree()方法:利用Graphviz實現(xiàn)二叉樹的可視化溪王,需要設置的參數(shù)為save_path和label腮鞍,save_path為文件保存路徑,默認的保存路徑為當前路徑下的Binary_Tree.gv,可以用戶自己設置莹菱;label為是否在Graphviz文件中添加二叉樹的左右子樹的標簽移国,用于分清哪棵是左子樹,哪棵是右子樹道伟,可以用用戶自己設置迹缀。

??若我們需要實現(xiàn)圖3的示例二叉樹,完整的Python代碼如下:

from Binary_Tree import BTree

# 構造二叉樹, BOTTOM-UP METHOD

right_tree = BTree(6)

right_tree.left = BTree(2)

right_tree.right = BTree(4)

left_tree = BTree(5)

left_tree.left = BTree(1)

left_tree.right = BTree(3)

tree = BTree(11)

tree.left = left_tree

tree.right = right_tree

left_tree = BTree(7)

left_tree.left = BTree(3)

left_tree.right = BTree(4)

right_tree = tree # 增加新的變量

tree = BTree(18)

tree.left = left_tree

tree.right = right_tree

print('先序遍歷為:')

tree.preorder()

print()

print('中序遍歷為:')

tree.inorder()

print()

print('后序遍歷為:')

tree.postorder()

print()

print('層序遍歷為:')

level_order = tree.levelorder()

print(level_order)

print()

height = tree.height()

print('樹的高度為%s.' % height)

print('葉子節(jié)點為:')

tree.leaves()

print()

# 利用Graphviz進行二叉樹的可視化

tree.print_tree(save_path='E://BTree.gv', label=True)

??OK,當我們運行上述代碼時蜜徽,可以得到該二叉樹的一些信息祝懂,輸出結果如下:

先序遍歷為:

18 7 3 4 11 5 1 3 6 2 4

中序遍歷為:

3 7 4 18 1 5 3 11 2 6 4

后序遍歷為:

3 4 7 1 3 5 2 4 6 11 18

層序遍歷為:

[[18], [7, 11], [3, 4, 5, 6], [1, 3, 2, 4]]

樹的高度為4.

葉子節(jié)點為:

3 4 1 3 2 4

該Python代碼的優(yōu)勢在于利用Graphviz實現(xiàn)了二叉樹的可視化,可以形象直觀地得到二叉樹的圖形拘鞋。在上面的代碼中砚蓬,我們可以看到,構建二叉樹不是很方便盆色,需要手動地一個個結點去添加灰蛙。那么,如果當我們需要根據(jù)某個列表傅事,按列表順序去構建二叉樹時缕允,即二叉樹的層序遍歷為該列表,那又該怎么辦呢蹭越?有什么好的辦法嗎障本?

??答案是必須有!按照某個列表去構建二叉樹的完整Python代碼如下:

from Binary_Tree import BTree

# 利用列表構造二叉樹

# 列表中至少有一個元素

def create_BTree_By_List(array):

? ? i = 1

? ? # 將原數(shù)組拆成層次遍歷的數(shù)組响鹃,每一項都儲存這一層所有的節(jié)點的數(shù)據(jù)

? ? level_order = []

? ? sum = 1

? ? while sum < len(array):

? ? ? ? level_order.append(array[i-1:2*i-1])

? ? ? ? i *= 2

? ? ? ? sum += i

? ? level_order.append(array[i-1:])

? ? # print(level_order)

? ? # BTree_list: 這一層所有的節(jié)點組成的列表

? ? # forword_level: 上一層節(jié)點的數(shù)據(jù)組成的列表

? ? def Create_BTree_One_Step_Up(BTree_list, forword_level):

? ? ? ? new_BTree_list = []

? ? ? ? i = 0

? ? ? ? for elem in forword_level:

? ? ? ? ? ? root = BTree(elem)

? ? ? ? ? ? if 2*i < len(BTree_list):

? ? ? ? ? ? ? ? root.left = BTree_list[2*i]

? ? ? ? ? ? if 2*i+1 < len(BTree_list):

? ? ? ? ? ? ? ? root.right = BTree_list[2*i+1]

? ? ? ? ? ? new_BTree_list.append(root)

? ? ? ? ? ? i += 1

? ? ? ? return new_BTree_list

? ? # 如果只有一個節(jié)點

? ? if len(level_order) == 1:

? ? ? ? return BTree(level_order[0][0])

? ? else: # 二叉樹的層數(shù)大于1

? ? ? ? # 創(chuàng)建最后一層的節(jié)點列表

? ? ? ? BTree_list = [BTree(elem) for elem in level_order[-1]]

? ? ? ? # 從下往上驾霜,逐層創(chuàng)建二叉樹

? ? ? ? for i in range(len(level_order)-2, -1, -1):

? ? ? ? ? ? BTree_list = Create_BTree_One_Step_Up(BTree_list, level_order[i])

? ? ? ? return BTree_list[0]

#array = list(range(1,19))

array = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

tree = create_BTree_By_List(array)

print('先序遍歷為:')

tree.preorder()

print()

height = tree.height()

print('\n樹的高度為%s.\n'%height)

print('層序遍歷為:')

level_order = tree.levelorder()

print(level_order)

print()

print('葉子節(jié)點為:')

tree.leaves()

print()

# 利用Graphviz進行二叉樹的可視化

tree.print_tree(save_path='E://create_btree_by_list.gv', label=True)

在上述程序中,筆者利用create_BTree_By_List()函數(shù)實現(xiàn)了按照某個列表去構建二叉樹买置,輸入的參數(shù)array為列表粪糙,要求列表中至少有一個元素。運行上述程序忿项,我們得到的26個大寫字母列表所構建的二叉樹的圖像如下:

輸出的結果如下:

先序遍歷為:

A B D H P Q I R S E J T U K V W C F L X Y M Z G N O

樹的高度為5.

層序遍歷為:

[['A'], ['B', 'C'], ['D', 'E', 'F', 'G'], ['H', 'I', 'J', 'K', 'L', 'M', 'N', 'O'], ['P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']]

葉子節(jié)點為:

P Q R S T U V W X Y Z N O

總結

??二叉樹是很多重要算法及模型的基礎蓉冈,比如二叉搜索樹(BST)城舞,哈夫曼樹(Huffman Tree),CART決策樹等寞酿。本文先介紹了樹的基本術語家夺,二叉樹的定義與性質(zhì)及遍歷、儲存伐弹,然后筆者自己用Python實現(xiàn)了二叉樹的上述方法拉馋,筆者代碼的最大亮點在于實現(xiàn)了二叉樹的可視化,這個功能是激動人心的惨好。

??在Python中煌茴,已有別人實現(xiàn)好的二叉樹的模塊,它是binarytree模塊日川,其官方文檔的網(wǎng)址為:https://pypi.org/project/binarytree/ 蔓腐。其使用的例子如下:

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市龄句,隨后出現(xiàn)的幾起案子合住,更是在濱河造成了極大的恐慌,老刑警劉巖撒璧,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異笨使,居然都是意外死亡卿樱,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門硫椰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來繁调,“玉大人,你說我怎么就攤上這事靶草√阋龋” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵奕翔,是天一觀的道長裕寨。 經(jīng)常有香客問我,道長派继,這世上最難降的妖魔是什么宾袜? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮驾窟,結果婚禮上庆猫,老公的妹妹穿的比我還像新娘。我一直安慰自己绅络,他們只是感情好月培,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布嘁字。 她就那樣靜靜地躺著,像睡著了一般杉畜。 火紅的嫁衣襯著肌膚如雪纪蜒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天寻行,我揣著相機與錄音,去河邊找鬼杆烁。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼铺呵,長吁一口氣:“原來是場噩夢啊……” “哼幻林!你這毒婦竟也來了症昏?” 一聲冷哼從身側(cè)響起蛾扇,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤更哄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡鱼喉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了锋边。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片皱坛。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖豆巨,靈堂內(nèi)的尸體忽然破棺而出剩辟,到底是詐尸還是另有隱情,我是刑警寧澤往扔,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布贩猎,位于F島的核電站,受9級特大地震影響萍膛,放射性物質(zhì)發(fā)生泄漏吭服。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一蝗罗、第九天 我趴在偏房一處隱蔽的房頂上張望艇棕。 院中可真熱鬧蝌戒,春花似錦、人聲如沸沼琉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽打瘪。三九已至友鼻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間闺骚,已是汗流浹背彩扔。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留葛碧,地道東北人借杰。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像进泼,于是被迫代替她去往敵國和親蔗衡。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 樹的定義與基本術語 ??樹型結構是一類重要的非線性數(shù)據(jù)結構乳绕,其中以樹和二叉樹最為常用绞惦,是以分支關系定義的層次結構。...
    山陰少年閱讀 58,891評論 3 32
  • 編譯環(huán)境:python v3.5.0, mac osx 10.11.4 前述內(nèi)容: 線性表 隊列 堆棧 線性結構...
    擲骰子的求閱讀 2,417評論 1 7
  • 樹的簡介 棧洋措、隊列济蝉、鏈表等數(shù)據(jù)結構,都是順序數(shù)據(jù)結構菠发。而樹是非順序數(shù)據(jù)結構王滤。樹型結構是一類非常重要的非線性結構。直...
    黎貝卡beka閱讀 15,507評論 4 25
  • 童年我是一個膽小內(nèi)向的小男孩滓鸠。 在一張快壞掉的照片上看到我兩三歲的樣子雁乡,黑黑肥肥,像一頭小黑熊糜俗。對于6/7歲之前的...
    方熾閱讀 130評論 0 0
  • 感冒還沒好 昨天夏目更新沒有看踱稍,的場一出沒有兩集應該結束不了,我還是靜靜等下周吧(*ˉ︶ˉ*)
    葉惟一閱讀 445評論 0 1