樹和二叉樹遍歷問題

樹和二叉樹遍歷問題

1.樹和二叉樹與數組(python中的列表)的關係?

樹和二叉樹是一種結構體,而數組(python中的列表)也是一種結構體,並且兩者具有相似的地方。樹和二叉樹在電腦中的存儲可以用數組(python中的列表)來進行存儲,存儲的方式是樹和二叉樹從上到下、從左到右依次進行存儲。

2.樹和二叉樹的遍歷有四種?

  (1)可以根據將樹和二叉樹存入到數組(python中的列表)的原則進行遍歷

  (2)先序遍歷(先根遍歷):順序是先根,然後是左子樹,最後是右子樹

  (3)中序遍歷(中根遍歷):順序是左子樹,然後是根,最後是右子樹

  (4)後序遍歷(後根遍歷):順序是左子樹,然後是右子樹,最後是根

遍歷演算法?

樹和二叉樹的定義是具有遞歸的韻味在其中,我們可利用遞歸方法解決樹和二叉樹的遍歷問題

下列方法如圖所示可知:

方法1(先序遍歷):

def preorde(a,i): //先序遍歷,i表示的是根節點的邏輯位置
    if i>len(a)-1: //條件終止是當根節點的邏輯位置大於數組的長度,則說明已經遍歷完了樹或二叉樹
        return -1
    print(a[i]) //列印根節點的值
    preorde(a,2*i+1) //列印左子樹的值
    preorde(a,2*i+2) //列印右子樹的值
a=[]
for i in input().split(' '): //輸入樹或二叉樹的的各個節點值存入數組的順序
    a.append(eval(i))
j=0
preorde(a,0)

方法2(中序遍歷):

def inorde(a,i): //中序遍歷,i表示的是根節點的邏輯位置
    if i>len(a)-1: //條件終止是當根節點的邏輯位置大於數組的長度,則說明已經遍歷完了樹或二叉樹
        return -1
    inorde(a,2*i+1) //先輸出左子樹的值
    print(a[i])  //在輸出根節點的值
    inorde(a,2*i+2) //最後輸出右子樹的值
a=[]
for i in input().split(' '):
    a.append(eval(i))
j=0
inorde(a,0)

     

方法3(後序遍歷):

def outorde(a,i):
    if i>len(a)-1:
        return -1
    outorde(a,2*i+1)
    outorde(a,2*i+2)
    print(a[i])
a=[]
for i in input().split(' '):
    a.append(eval(i))
j=0
outorde(a,0)

重點:上述三種遍歷的演算法的書寫是一模一樣,只不過是在遞歸函數中中的語句先後順序不同。只要記得其中一種,類外兩種都可以寫出來