python 二叉樹構造及遍歷

2021-10-25 06:05:32 字數 3717 閱讀 3630

二叉樹(binary tree) 是一種樹狀結構,每個節點最多有兩個子樹,並且分為左、右兩個子樹。

class

treenode

(object):

def__init__

(self, data, left=

none

, right=

none):

self.data = data

self.left = left

self.right = right

if __name__ ==

'__main__'

: g = treenode(

'g')

f = treenode(

'f')

e = treenode(

'e')

d = treenode(

'd')

c = treenode(data=

'c', left=f, right=g)

b = treenode(data=

'b', left=d, right=e)

a = treenode(data=

'a', left=b, right=c)

前序遍歷順序:根節點 —>左節點—>右節點

實現概述:

先訪問每個根節點,繼而訪問左節點,最後是右節點,

1.那麼只要先列印每個節點的根節點。

2.然後遞迴左節點,此時左節點變為根節點,列印此節點,繼續遞迴左節點列印。

3.最後遞迴右節點,此時右節點變為根節點,列印此節點,繼續遞迴右節點列印。

class

treenode

(object):

def__init__

(self, data, left=

none

, right=

none):

self.data = data

self.left = left

self.right = right

defpreorder

(node)

:print

(node.data)

if node.left is

notnone

: preorder(node.left)

if node.right is

notnone

: preorder(node.right)

if __name__ ==

'__main__'

: g = treenode(

'g')

f = treenode(

'f')

e = treenode(

'e')

d = treenode(

'd')

c = treenode(data=

'c', left=f, right=g)

b = treenode(data=

'b', left=d, right=e)

a = treenode(data=

'a', left=b, right=c)

preorder(a)

中序遍歷順序:左節點 —>根節點—>右節點

實現概述:

先訪問每個左節點,繼而訪問根節點,最後是右節點,

1.先遞迴左節點,找到最左節點。

2.列印根節點(此時已在最左節點,所以列印根節點即可)

3.最後遞迴右節點。

class

treenode

(object):

def__init__

(self, data, left=

none

, right=

none):

self.data = data

self.left = left

self.right = right

definorder

(node)

:if node.left is

notnone

: inorder(node.left)

print

(node.data)

if node.right is

notnone

: inorder(node.right)

if __name__ ==

'__main__'

: g = treenode(

'g')

f = treenode(

'f')

e = treenode(

'e')

d = treenode(

'd')

c = treenode(data=

'c', left=f, right=g)

b = treenode(data=

'b', left=d, right=e)

a = treenode(data=

'a', left=b, right=c)

inorder(a)

中序遍歷順序

左節點 —>右節點—>根節點

實現概述:

先訪問每個左節點,繼而訪問右節點,最後是根節點,

1.先遞迴左節點,找到最左節點。

2.繼而遞迴右節點

3.最後列印該節點。

class

treenode

(object):

def__init__

(self, data, left=

none

, right=

none):

self.data = data

self.left = left

self.right = right

defpostorder

(node)

:if node.left is

notnone

: postorder(node.left)

if node.right is

notnone

: postorder(node.right)

print

(node.data)

if __name__ ==

'__main__'

: g = treenode(

'g')

f = treenode(

'f')

e = treenode(

'e')

d = treenode(

'd')

c = treenode(data=

'c', left=f, right=g)

b = treenode(data=

'b', left=d, right=e)

a = treenode(data=

'a', left=b, right=c)

postorder(a)

二叉樹及二叉樹的遍歷

二叉樹的定義 樹的度為2的樹。二叉樹的遞迴定義 二叉樹或者是一棵空樹,或者是一棵由乙個根結點和兩棵互不相交的左子樹和右子樹所組成的非空樹,而左右子樹又都是一棵二叉樹。1.第i層上至多有2的i 1次方個結點。2.深度為h的二叉樹至多有2的h次方減1個結點。3.每一層都滿的二叉樹稱為滿二叉樹,只在最後一...

二叉樹構造和遍歷

手敲下二叉樹 coding utf 8 class node object def init self,ele 1,left none,right none self.ele ele self.l left self.r right class binarytree object def init ...

二叉樹 根據遍歷構造二叉樹

二叉樹中的三種遍歷方式,是我們最為熟知的,通過先序遍歷 中序遍歷或者是中序遍歷 後序遍歷都可以唯一確定一棵二叉樹 但是注意,先序遍歷 後序遍歷不能確定一棵二叉樹,但是如果一棵二叉樹中只有度為0和度為2的節點,那麼這種遍歷方式也是可以確定一棵確定的二叉樹的。先序 中序 構造二叉樹 下面我們分別來看一下...