Python 二叉数的实例化及遍历

发布于:2024-06-02 ⋅ 阅读:(51) ⋅ 点赞:(0)

首先创建一个这样的二叉树,作为我们今天的实例。实例代码在下方。
 

#创建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]]