二叉树的四种遍历顺序
二叉树的四种遍历顺序:
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