首先创建一个这样的二叉树,作为我们今天的实例。实例代码在下方。
#创建1个树类型
class TreeNode:
def __init__(self,val,left=None,right=None):
self.val=val
self.left=left
self.right=right
#实例化类
node1=TreeNode(5)
node2=TreeNode(6)
node3=TreeNode(7)
node4=TreeNode(1)
node5=TreeNode(2)
node1.left=node2
node1.right=node3
node2.left=node4
node2.right=node5
#指定根节点
root=node1
接下来我们便可以对上面创建好的树进行遍历了,下面是用递归的方法进行前序遍历和后序遍历。
class Solution:
def preorder(self,root):
self.result=[]
self.dfs_pre(root)
return self.result
def postorder(self,root):
self.result=[]
self.dfs_post(root)
return self.result
def dfs_pre(self,root):
if not root:
return []
self.result.append(root.val)
self.dfs_pre(root.left)
self.dfs_pre(root.right)
def dfs_post(self,root):
if not root:
return []
self.dfs_post(root.left)
self.dfs_post(root.right)
self.result.append(root.val)
binar=Solution()
pre=binar.preorder(root)
post=binar.postorder(root)
print('前序遍历为:',pre)
out:
前序遍历为: [5, 6, 1, 2, 7]
print('后序遍历为:',post)
out:
后序遍历为: [1, 2, 6, 7, 5]
下面是用层序遍历(广度优先)的方法进行二叉树的遍历,使用了辅助数据结构队列(先进先出)来辅助遍历。
import collections
def levelOrder(root):
if not root:
return []
#首先将根节点加入进队列
queue = collections.deque([root])
result = []
while queue:
level = []
for _ in range(len(queue)):
cur = queue.popleft()
print('cur',cur.val)
level.append(cur.val)
if cur.left:
queue.append(cur.left)
if cur.right:
queue.append(cur.right)
result.append(level)
return result
level=levelOrder(root)
print('层序遍历结果为:',level)
out:
层序遍历结果为: [[5], [6, 7], [1, 2]]