您的位置:

Python 二叉树

一、什么是二叉树

二叉树是一种数据结构,它由节点组成,每个节点最多有两个子节点。节点有一个称为“根”的特殊节点,它是整个树的起点。每个节点都有一个有向边连接到其子节点。如果没有子节点,则称该节点为“叶子节点”。根据节点的排列方式,二叉树可以分为以下几种类型:

  • 满二叉树:每个节点都有两个子节点,除了叶子节点外
  • 完全二叉树:不一定每个节点都有两个子节点,但是任何缺失子节点的节点都必须在右边的子树中

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

二、二叉树的遍历

二叉树的遍历是指按照一定方法遍历二叉树节点的过程。常用的遍历方法有前序遍历、中序遍历和后序遍历。

  • 前序遍历:根节点->左子树->右子树
  • 中序遍历:左子树->根节点->右子树
  • 后序遍历:左子树->右子树->根节点

class BinaryTree:
    def __init__(self, val):
        self.left = None
        self.right = None
        self.val = val

    def preorderTraversal(self, root):
        res = []
        if root:
            res.append(root.val)
            res += self.preorderTraversal(root.left)
            res += self.preorderTraversal(root.right)
        return res

    def inorderTraversal(self, root):
        res = []
        if root:
            res += self.inorderTraversal(root.left)
            res.append(root.val)
            res += self.inorderTraversal(root.right)
        return res

    def postorderTraversal(self, root):
        res = []
        if root:
            res += self.postorderTraversal(root.left)
            res += self.postorderTraversal(root.right)
            res.append(root.val)
        return res

三、二叉树的应用

1.表达式树

表达式树是一种二叉树,其中每个叶节点都是一个操作数,而其他节点都是操作符。通过遍历表达式树,可以实现对表达式的计算。


class ExpressionTree:
    def __init__(self, val):
        self.left = None
        self.right = None
        self.val = val

    def evaluate(self):
        if self.val.isdigit():
            return int(self.val)
        else:
            left_val = self.left.evaluate()
            right_val = self.right.evaluate()
            if self.val == '+':
                return left_val + right_val
            elif self.val == '-':
                return left_val - right_val
            elif self.val == '*':
                return left_val * right_val
            else:
                return left_val / right_val

2.哈夫曼树

哈夫曼树是一种特殊的树,其中有权重的叶子节点表示字符,并且具有最小的路径权重和。哈夫曼树经常用于编码和解码数据。


class HuffmanTree:
    def __init__(self, freq, left=None, right=None):
        self.freq = freq
        self.left = left
        self.right = right

    def __lt__(self, other):
        return self.freq < other.freq

    def isLeaf(self):
        return self.left is None and self.right is None

    def buildHuffmanTree(freq_map):
        heap = []
        for char, freq in freq_map.items():
            heapq.heappush(heap, (freq, HuffmanTree(freq, char)))
        while len(heap) > 1:
            freq1, tree1 = heapq.heappop(heap)
            freq2, tree2 = heapq.heappop(heap)
            heapq.heappush(heap, (freq1 + freq2, HuffmanTree(freq1 + freq2, tree1, tree2)))
        return heap[0][1]

四、总结

Python 二叉树是一种重要的数据结构,在计算机科学领域有广泛的应用。我们可以用它来遍历树、求解表达式、以及构建哈夫曼树等。掌握这些知识可以更好地理解和解决许多计算机科学问题。

Python 二叉树

2023-05-24
二叉树层序遍历递归python(递归层次遍历二叉树)

2022-11-16
遍历线索化二叉树java(遍历二叉树和线索二叉树)

2022-11-15
二叉树golang,二叉树的度

2022-11-28
Python二叉树用法介绍

二叉树是一种非常重要的数据结构,它在计算机科学中得到了广泛应用,例如在搜索算法、图形渲染和游戏AI等领域。本文将以Python二叉树为中心,从多个角度对其进行详细阐述,包括二叉树定义、二叉树遍历、二叉

2023-12-08
Python二叉树用法介绍

二叉树是一种非常重要的数据结构,它在计算机科学中得到了广泛应用,例如在搜索算法、图形渲染和游戏AI等领域。本文将以Python二叉树为中心,从多个角度对其进行详细阐述,包括二叉树定义、二叉树遍历、二叉

2023-12-08
红黑树和平衡二叉树的区别

2023-05-21
java二叉树测试(二叉查找树java)

2022-11-11
数据结构c语言二叉树的查找,数据结构c语言版二叉树代码

2022-11-22
二叉树java,二叉树java实现

2023-01-10
用c语言将二叉树转换为双向链表,二叉树转化为二叉链表

2022-11-29
平衡二叉树

2023-05-16
完美二叉树

2023-05-20
线索化二叉树

2023-05-22
php实现二叉树前中后序遍历,求二叉树前序遍历

2022-11-29
php二叉树的一些操作练习(php二叉树算法)

2022-11-15
二叉树是什么

2023-05-18
二叉树java,二叉树java打印中根

2022-12-02
java二叉树,java二叉树遍历算法

2023-01-09
二叉排序树的构造

2023-05-20