二叉树

二叉树的 Python 实现

数据结构定义

class Node:
    def __init__(self, item):
        self.item = item
        self.left = None
        self.right = None

class Tree:
    def __init__(self):
        self.root = None

添加节点

    def add(self, item):
        node = Node(item)
        if self.root is None:
            self.root = node
            return
        else:
            queue = [self.root]
            while queue:
                cur = queue.pop(0)
                if cur.left is None:
                    cur.left = node
                    return
                else:
                    queue.append(cur.left)
                if cur.right is None:
                    cur.right = node
                    return
                else:
                    queue.append(cur.right)

遍历方式

  • 广度遍历(层次遍历)
    def travel(self):
        if self.root is None:
            print('')
            return
        else:
            queue = [self.root]
            while queue:
                cur = queue.pop(0)
                print(cur.item)
                if cur.left is not None:
                    queue.append(cur.left)
                if cur.right is not None:
                    queue.append(cur.right)
  • 深度遍历

    • 前序遍历(根左右)
    def forwordTravel(self, root):
        if root is None:
            return
        print(root.item, end=' ')
        self.forwordTravel(root.left)
        self.forwordTravel(root.right)
  • 中序遍历(左根右)
    def middleTravel(self, root):
        if root is None:
            return
        self.middleTravel(root.left)
        print(root.item, end=' ')
        self.middleTravel(root.right)
  • 后序遍历(左右根)
    def backTravel(self, root):
        if root is None:
            return
        self.backTravel(root.left)
        self.backTravel(root.right)
        print(root.item, end=' ')

测试代码

tree = Tree()
tree.add('0')
tree.add('1')
tree.add('2')
tree.add('3')
tree.add('4')
tree.add('5')
tree.add('6')
tree.add('7')
tree.add('8')
tree.add('9')

tree.travel()  # 广度遍历
tree.forwordTravel(tree.root)  # 前序遍历
print('\n')
tree.backTravel(tree.root)  # 后序遍历
print('\n')
tree.middleTravel(tree.root)  # 中序遍历
print('\n')

排序二叉树的 Python 实现

数据结构定义

class Node:
    def __init__(self, item):
        self.item = item
        self.left = None
        self.right = None

class Tree:
    def __init__(self):
        self.root = None

插入节点

    def insert(self, item):
        node = Node(item)
        cur = self.root
        if cur is None:
            self.root = node
            return
        while True:
            if item < cur.item:
                if cur.left is None:
                    cur.left = node
                    return
                else:
                    cur = cur.left
            else:
                if cur.right is None:
                    cur.right = node
                    return
                else:
                    cur = cur.right

遍历方式

  • 前序遍历(根左右)
    def preTravel(self, root):
        if root is None:
            return
        print(root.item, end=' ')
        self.preTravel(root.left)
        self.preTravel(root.right)
  • 中序遍历(左根右)
    def middleTravel(self, root):
        if root is None:
            return
        self.middleTravel(root.left)
        print(root.item, end=' ')
        self.middleTravel(root.right)
  • 后序遍历(左右根)
    def backTravel(self, root):
        if root is None:
            return
        self.backTravel(root.left)
        self.backTravel(root.right)
        print(root.item, end=' ')

测试代码

tree = Tree()
tree.insert(3)
tree.insert(8)
tree.insert(5)
tree.insert(7)
tree.insert(6)

tree.preTravel(tree.root)  # 前序遍历
print('\n')
tree.middleTravel(tree.root)  # 中序遍历
print('\n')
tree.backTravel(tree.root)  # 后序遍历
print('\n')

posted @ 2021-07-13 15:34  杨梅杨梅  阅读(26)  评论(0)    收藏  举报