在链表中,一个节点只能有一个后继节点和前驱节点。而在树中,一个节点可以有多个后继节点,但只能有一个前驱节点。节点的 度表示有几个后继节点, 树的度是最大的节点的度。二叉树是度为2的树。
在树中,没有前驱节点的节点称为根节点,没有后继节点的节点称为叶子节点。前驱节点也称为父节点,后继节点也称为子节点。具有相同父节点的节点称为兄弟节点。
节点
每个节点有两个后继节点,分别为左子节点和右子节点。
class Node(): def __init__(self, item): self.elem = item self.lchild = None self.rchild = None
构造树
每个树有个根节点。
class Tree(): def __init__(self): self.root = None
层遍历
树具有一个层次结构,从根节点最高层到最低层,每层从左向右遍历。需要借助队列实现。
def level_travel(self): if self.root == None: return queue = [self.root] while queue: cur = node = queue.pop(0) print(cur.elem, end=" ") if cur.lchild != None: queue.append(cur.lchild) if cur.rchild != None: queue.append(cur.rchild)
添加节点
树具有一个层次结构,我们在每层按照从左至右的方向添加节点。我们从第一层开始,依次判断根节点是否有左子节点和右子节点,如果没有,则添加;如果有,则转到第二层。以此类推。实现上与层遍历有点类似。
def add(self, item): node = Node(item) # 如果节点为空 if self.root == None: self.root = node return queue = [self.root] while queue: cur = queue.pop(0) if cur.lchild == None: cur.lchild = node return else: queue.append(cur.lchild) if cur.rchild == None: cur.rchild = node return else: queue.append(cur.rchild)
备注:添加节点while queue:
cur = node = queue.pop(0),不能把queue.pop(0)的值赋给node, 因为node = Node(item), 如果赋给了node, 就会让node无限指向自己,应该写成cur = queue.pop(0)
先序遍历
先序遍历是先遍历根节点,再遍历左子树,最后遍历右子树。对于遍历子树而言,也是遍历子树的根节点,再遍历子树的左子树,最后遍历子树的右子树。可以用递归实现。
def preorder_travel(self, node):
# 如果节点为空
if node == None:
return
print(node.elem, end=" ")
self.preorder_travel(node.lchild)
self.preorder_travel(node.rchild)
中序遍历
中序遍历则先遍历左子树,再遍历根节点,最后遍历右子树。
def inorder_travel(self, node):
# 如果节点为空
if node == None:
return
self.inorder_travel(node.lchild)
print(node.elem, end=" ")
self.inorder_travel(node.rchild)
### 最后
> **🍅 硬核资料**:关注即可领取PPT模板、简历模板、行业经典书籍PDF。
> **🍅 技术互助**:技术群大佬指点迷津,你的问题可能不是问题,求资源在群里喊一声。
> **🍅 面试题库**:由技术群里的小伙伴们共同投稿,热乎的大厂面试真题,持续更新中。
> **🍅 知识体系**:含编程语言、算法、大数据生态圈组件(Mysql、Hive、Spark、Flink)、数据仓库、Python、前端等等。
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化学习资料的朋友,可以戳这里无偿获取](https://bbs.csdn.net/topics/618317507)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**