二叉树的遍历分为深度优先遍历和广度优先遍历 。
深度优先遍历顾名思义是从树的一条分支走到底才进行回溯,深度优先遍历又分为前序遍历,中序遍历和后序遍历。
一棵二叉树由根结点、左子树和右子树三部分组成,若规定 D、L、R 分别代表遍历根结点、遍历左子树、遍历右子树。
DLR--前序遍历(根在前,从左往右,一棵树的根永远在左子树前面,左子树又永远在右子树前面 )
LDR--中序遍历(根在中,从左往右,一棵树的左子树永远在根前面,根永远在右子树前面)
LRD--后序遍历(根在后,从左往右,一棵树的左子树永远在右子树前面,右子树永远在根前面)
前序遍历代码实现:
def preorder(self, root):
if root is None:
return
print(root.elem)
self.preorder(root.left)
self.preorder(root.right)
中序遍历代码实现:
def inorder(self, root):
if root is None:
return
self.inorder(root.left)
print(root.elem)
self.inorder(root.right)
后序遍历代码实现:
def p