返回

数据结构——树结构(二叉树封装)

闲谈

在昨天我们探讨了二叉搜索树的概念,今天我们深入分析二叉树的封装实现。

定义根属性

一个二叉树的关键属性是根节点 (root),它代表树的起点。如果根节点为空,则树为空。

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

插入节点

当我们插入一个节点时,我们需要判断根节点是否为空。如果为空,则将新节点作为根节点。否则,我们沿着树遍历,寻找一个合适的插入位置。

def insert(self, val):
    if self.root is None:
        self.root = TreeNode(val)
    else:
        _insert(val, self.root)

def _insert(val, node):
    if val < node.val:
        if node.left is None:
            node.left = TreeNode(val)
        else:
            _insert(val, node.left)
    elif val > node.val:
        if node.right is None:
            node.right = TreeNode(val)
        else:
            _insert(val, node.right)
    else:
        print("Value already exists in the tree.")

查找节点

在二叉树中查找一个节点需要递归遍历。我们从根节点开始,将当前节点的值与目标值进行比较。

def find(self, val):
    if self.root is None:
        return None

    return _find(val, self.root)

def _find(val, node):
    if node is None:
        return None

    if val == node.val:
        return node
    elif val < node.val:
        return _find(val, node.left)
    else:
        return _find(val, node.right)

总结

通过封装二叉树的基本操作,我们可以方便地处理树形数据结构。这些操作包括插入节点、查找节点,以及根据需要添加的其他操作。理解树结构的封装有助于我们深入了解数据结构的基础原理。