阅前提示
该系列为数据结构回顾向文章,重点在于温故知新。
适合人群: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))
二叉树
最常见的树,是后续搜索树的基本结构