二叉树的四种遍历顺序

二叉树的四种遍历顺序:

1.层序遍历:是一层一层往下便利的

2.先序遍历:这个的顺序像递归

3.中序遍历:从下往上从左往右

4.后序遍历:从上往下从左往右

 

 创建节点
class Node:
    # 构造函数
    def __init__(self ,elem):
        self.data = elem
        self.lchild = None
        self.rchild = None


# 创建树
class Tree:
    def __init__(self):
        self.root = None
        self.queue = []

    def add(self ,elem):
        #print(self.queue)
        node = Node(elem)
        if self.root == None:
            self.root = node
            self.queue.append(self.root)
        else:
            parent = self.queue[0]
            ############################################
            #补充  非完全二叉树
            #print(parent.data)
            if elem == None:
                if parent.lchild == None:
                    parent.lchild = -1
                    return
                if parent.rchild == None:
                    parent.rchild = -1
                    self.queue.pop(0)
                    return
            ###########################################
            if parent.lchild == None:
                parent.lchild = node
                self.queue.append(node)
            else:
                parent.rchild = node
                self.queue.append(node)
                #print(parent.data)
                #print(node.data)
                self.queue.pop(0)

  

举几个例子:

 

  

 

1.

左图为:

 

    def level_queue(self):
        #print(self.queue)
        root = self.root
        q = [root]
        while q != []:
            parent = q.pop(0)
            if parent == None:
                print(None)
                continue
            print(parent.data)
            if parent.lchild == -1:
                q.append(None)
            if parent.rchild == -1:
                q.append(None)
            if parent.lchild != None and parent.lchild != -1:
                q.append(parent.lchild)
            if parent.rchild != None and parent.rchild != -1:
                q.append(parent.rchild)

 

层序:5,2,8,1,4,7,3

 

# traverse   先序遍历
def front_traverse(self ,parent):
if parent == None:
return
print(parent.data)
if parent.lchild != -1:
self.front_traverse(parent.lchild)
else:
print("None")
if parent.rchild != -1:
self.front_traverse(parent.rchild)
else:
print("None")

 

先序:5,2,1,4,3,8,7

    #中序遍历
    def mid_traverse(self ,parent):
        if parent == None:
            return
        if parent.lchild != -1:
            self.mid_traverse(parent.lchild)
        else:
            print("None")
        print(parent.data)
        if parent.rchild != -1:
            self.mid_traverse(parent.rchild)
        else:
            print("None")

  

中序:1,2,3,4,5,7,8

 

# 后序遍历
    def later_traverse(self, parent):
        if parent == None:
            return
        if parent.lchild != -1:
            self.later_traverse(parent.lchild)
        else:
            print("None")
        if parent.rchild != -1:
            self.later_traverse(parent.rchild)
        else:
            print("None")
        print(parent.data)

 

  

 

 

后序:1,3,4,2,7,8,5

 

2.

 

层序:A,B,C,D,E,F,G,H,I,J,K

先序:A,B,D,H,E,I,C,F,J,K,G

中序:D,H,B,E,I,A,J,F,K,C,G

后序:H,D,I,E,B,J,K,F,G,C,A

参考见:https://www.jianshu.com/p/456af5480cee

posted @ 2021-07-25 08:10  学习Python的人  阅读(944)  评论(0编辑  收藏  举报