二叉树是很重要的数据结构,在面试还是日常开发中都是很重要的角色。
首先是建立树的过程,对比C或是C++的实现来讲,其涉及到了较为复杂的指针操作,但是在面向对象的语言中,就不需要考虑指针, 内存等。首先我们需要定义一个树节点, 我们采用基于链表设计的节点, 首先定义一个数据域, 其次就是左孩子和右孩子。如下定义:
#树节点的定义
classNode:def __init__(self, data=-1, lchild=None, rchild=None):
self.lchild= lchild #表示左子树
self.rchild = rchild #表示右子树
self.data = data #表示数据域
建立树的实现有两种,遍历建树与层次建树,这两种分别是基于堆栈和队列来实现的,先来看看最基本的递归建树。
递归建树的过程无非就是一路走到底,但是需要将节点的左右孩子节点对其余的节点相关联起来。因此,我们可以如此来实现:
deftraversal_create(self, root):
data=input()if data is "#":returnNoneelse:
root.data=data
root.lchild=self.traversal_create(root.lchild)
root.rchild=self.traversal_create(root.rchild)return root
首先我们传入的参数是一个默认的节点,其data数据域为-1,然后我们接受输入的数据,赋值给节点数据域,然后就是递归了,将左右孩子