二叉树的理解
二叉树的理解
![在这里插入图片描述](https://img-blog.csdnimg.cn/1ed8fcbe49434bd8bf7eb3688ec68c7c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAT3V0bG9vayheX14p,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/08c8da3ae3ca40e7895801b72df553fa.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAT3V0bG9vayheX14p,size_19,color_FFFFFF,t_70,g_se,x_16)
二叉树的实现
思路
- 封装节点
- 封装二叉树
- 实现先序遍历
基本思想:先访问根结点,再先序遍历左子树,最后再先序遍历右子树即根—左—右。
![在这里插入图片描述](https://img-blog.csdnimg.cn/59011893edfd4ee49aa20d0c061b7186.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAT3V0bG9vayheX14p,size_19,color_FFFFFF,t_70,g_se,x_16)
代码
class Node(object):
"""封装 节点类"""
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class BinaryTree(object):
"""封装 二叉树"""
def __init__(self, root):
self.root = root
def pre_travel(self, root):
"""先序遍历: 根-左-右"""
if (root != None):
print(root.val, end=' ')
self.pre_travel(root.left)
self.pre_travel(root.right)
def in_travel(self, root):
"""中序遍历: 左-根-右"""
if (root != None):
self.in_travel(root.left)
print(root.val, end=' ')
self.in_travel(root.right)
def last_travel(self, root):
"""后序遍历: 左-右-根"""
if (root!= None):
self.last_travel(root.left)
self.last_travel(root.right)
print(root.val, end=' ')
if __name__ == '__main__':
node1 = Node(1)
node2 = Node(2)
node3 = Node(3)
node4 = Node(4)
node5 = Node(5)
node6 = Node(6)
node7 = Node(7)
node8 = Node(8)
node9 = Node(9)
node10 = Node(10)
bt = BinaryTree(root=node1)
node1.left = node2
node1.right = node3
node2.left = node4
node2.right = node5
node3.left = node6
node3.right = node7
node4.left = node8
node4.right = node9
node5.left = node10
bt.pre_travel(node1)
print()
bt.in_travel(node1)
print()
bt.last_travel(node1)