温故知新:数据结构的分水树(岭)- 上篇

本文是数据结构回顾系列,介绍树的概念,特别是二叉树和二叉查找树。二叉树由FirstChild和NextSibling构成,拥有先序、后序遍历方式。二叉查找树是一种特殊的二叉树,左子树值小于根节点,右子树值大于根节点,删除操作可能导致不平衡。文章适合所有开发者,旨在帮助读者深入理解数据结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

阅前提示

该系列为数据结构回顾向文章,重点在于温故知新。
适合人群:All
阅读方式:浏览回顾
本系列在不断更新中,如果对你有所帮助,点赞收藏吧:)


树,大家最熟悉又最陌生。
天天的撸码生涯是不是天天打交道呢?多半已经被优化并封装好了,我们会用就行啦。但是还是要好好掌握一下这个分水岭的妙处~
为什么称之为分水岭呢?作者大学期间刚刚开始学习数据结构课程的时候,前面的队列链表顺风顺,水上课不用听也基本上可以把它撸出来,现在也记忆犹新。
然而不知道哪一天开始学树了…然后我对数据结构的的记忆就到此终止了…
好了,无论是温故知新还是重新学习,借来下我们就好好认识一下这个分水树(岭)吧~

节点由 FirstChild(第一个子节点) + NextSibling(从左至右,下一个兄弟节点)构成

​ 先序遍历:处理子节点前先处理自身

​ 后序遍历:先处理子节点,再处理自身

class TreeNode:
    Value = None;
    FirstChild = None; # 第一个子节点
    NextSibling = None; # 右侧下一个兄弟
    def __init__(self,v:int):
        self.Value = v;

# 先序
def ListOfTree(Node:TreeNode,depth:int):
    empty = "  "
    if(Node.Value == Node):
        print(empty*depth + "N")
    else:
        print(empty*depth + str(Node.Value))
    if(Node.FirstChild != None):
        ListOfTree(Node.FirstChild,depth + 1);
    if(Node.NextSibling != None):
        ListOfTree(Node.NextSibling,depth);

# 后续
def ListOfTree2(Node:TreeNode,depth:int):
    empty = "  "
    if(Node.FirstChild != None):
        ListOfTree2(Node.FirstChild,depth + 1);
    if (Node.NextSibling != None):
        ListOfTree2(Node.NextSibling, depth);
    if(Node.Value == Node):
        print(empty*depth + "N")
    else:
        print(empty*depth + str(Node.Value))

二叉树

最常见的树,是后续搜索树的基本结构

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值