二叉树的定义、遍历和代码实现

文章介绍了二叉树的基本定义,包括其结构和特点,并详细阐述了四种主要的二叉树遍历方法:前序遍历、中序遍历、后序遍历和层序遍历,同时提供了Python代码实现。此外,还展示了如何插入新节点以及打印二叉树的示例。
摘要由CSDN通过智能技术生成

 1、二叉树的定义

2、二叉树的遍历

3、 代码实现二叉树

1、二叉树的定义

        二叉树是一种树状结构,每个节点最多由两个子节点,分别成为左子节点和右子节点。具体来说,二叉树是由一组有限节点的组成的集合,这些节点通过链接(边)相互连接。其中由一个节点被指为根节点,除了根节点外,每个节点最多有一个父类点。若某节点没有子节点,那么它就是叶子节点。二叉树的特点是它的子树是有序的,即左子树和右子树是有区别的。二叉树常用于数据结构、算法和计算机科学等领域中。

2、二叉树的遍历

        二叉树有4中遍历方式分别为前序遍历、中序遍历、后序遍历及层序遍历。

前序遍历:前序遍历即是从根节点开始,依次遍历左子树左子节点右子节点右子树左子节点右子节点。

定义二叉树

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

前序遍历可以用递归实现:

def preorder_traversal(root):
    if root is None:
        return
    print(root.val, end=",")
    preorder_traversal(root.left)
    preorder_traversal(root.right)
中序遍历:
中序遍历可以看成将二叉树垂直向下投影,从左到右的顺序

  中序遍历也可以使用递归实现:

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

后序遍历:
先遍历左子树再右子树,不论对于左子树右子树还是根节点,都是先遍历左节点再遍历右节点。

def postorderTraversal(root: TreeNode) -> List[int]:
    if root is None:
        return []
    left = postorderTraversal(root.left)
    right = postorderTraversal(root.right)
    return left + right + [root.val]

层序遍历:

从根节点开始,从左向右一层一层遍历。

可以使用队列来实现层序遍历

def levelOrderTraversal(root):
    if not root:
        return []
    
    queue = [root]
    result = []
    
    while queue:
        size = len(queue)
        level = []
        
        for i in range(size):
            node = queue.pop(0)
            level.append(node.val)
            if node.left:
                queue.append(node.left)
            if node.right:
                queue.append(node.right)
                
        result.append(level)
        
    return result

3、代码实现二叉树

我们先定义一个子节点,再定义一个根节点,然后对二叉树进行插入、打印操作。

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


class BinaryTree:
    def __init__(self, root=None):
        self.root = root


    def insert(self, val):
        new_code = TreeNote(val)
        if not self.root:
            self.root = new_code
        else:
            queue = [self.root]
            while queue:
                node = queue.pop(0)
                if not node.left:
                    node.left = new_code
                    return
                elif not node.right:
                    node.right = new_code
                    return
                else:
                    queue.append(node.left)
                    queue.append(node.right)

    def print_tree(self):
        if not self.root:
            return
        queue = [self.root]
        while queue:
            node = queue.pop(0)
            print(node.val, end=",")#特别关注
            if node.left:
                queue.append(node.left)
            if node.right:
                queue.append(node.right)


tree = BinaryTree(TreeNote(0))

for i in range(1,15):
    tree.insert(i)

tree.print_tree()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值