python 数据结构之:二叉树

二叉树

1 二叉树:

  • 根节点
  • 叶子节点:
    • 左叶子节点
    • 右叶子节点
  • 树的层级
  • 树的调度

2 二叉树的遍历:

  • 广度优先遍历:一层一层对节点进行遍历
  • 尝试优先遍历:
    • 前序:根左右
    • 中序:左根右
    • 后序:左右根

3 二叉树的遍历

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


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

    def add(self, item):
        node = Node(item)
        # 插入第一个节点情况
        if self.root is None:
            self.root = node
            return
        root = self.root
        cur_list = [root]
        while cur_list:
            cur = cur_list.pop(0)
            if cur.left is None:
                cur.left = node
                return
            else:
                cur_list.append(cur.left)
            if cur.right is None:
                cur.right = node
                return
            else:
                cur_list.append(cur.right)

    def travel(self):
        root = self.root
        cur_list = [root]
        while cur_list:
            cur = cur_list.pop(0)
            print(cur.item)
            if cur.left:
                cur_list.append(cur.left)
            if cur.right:
                cur_list.append(cur.right)

    def forward(self, root):
        """
        前序:根左右
        :param root:
        :return:
        """
        if root is None:
            return
        print(root.item)
        self.forward(root.left)
        self.forward(root.right)

    def middle(self, root):
        """
        中序:左根右
        :param root:
        :return:
        """
        if root is None:
            return
        self.middle(root.left)
        print(root.item)
        self.middle(root.right)

    def back(self, root):
        """
        后序:左右根
        :param root:
        :return:
        """
        if root is None:
            return
        self.back(root.left)
        self.back(root.right)
        print(root.item)


tree = Tree()
tree.add(1)
tree.add(2)
tree.add(3)
tree.add(4)
tree.add(5)
tree.add(6)
tree.travel()
# 1,2,3,4,5,6

tree.forward(tree.root)
# 1,2,4,5,3,6

tree.middle(tree.root)
# 4,2,5,1,6,3

tree.back(tree.root)
# 4,5,2,6,3,1

4 排序二叉树实现排序

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


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

    def sort_tree(self, item):
        node = Node(item)
        # 插入第一个节点时的情况
        if self.root is None:
            self.root = node
            return
        cur = self.root
        while cur:
            # 左侧插入
            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 travel(self):
        root = self.root
        cur_list = [root]
        while cur_list:
            cur = cur_list.pop(0)
            print(cur.item)
            if cur.left:
                cur_list.append(cur.left)
            if cur.right:
                cur_list.append(cur.right)

    def middle(self, root):
        if root is None:
            return
        self.middle(root.left)
        print(root.item)
        self.middle(root.right)


tree = Tree()
a_list = [94, 3, 86, 99, 19, 78, 28, 55, 47, 31]
for i in a_list:
    tree.sort_tree(i)
tree.travel()
# 94,3,99,86,19,78,28,55,47,31

tree.middle(tree.root)
# 3,19,28,31,47,55,78,86,94,99
posted @ 2023-07-08 10:22  f_carey  阅读(8)  评论(0编辑  收藏  举报