python数据结构之二叉树

1、什么是二叉树

定义大家看过很多了,直接上图好理解:
python数据结构之二叉树_第1张图片
二叉树的特点:
(1)每个节点有0-2个子树,子树分左右,即使只有一个子树也要分左右;
(2)除根节点以外,任何一个节点只有一个父节点

2、二叉树的遍历实现(迭代)

(1)前序遍历

class Treenode(): # 二叉数节点类 
    def __init__(self,data):
        self.data = data
        self.lchild = None
        self.rchild = None

def dispaly_tree_pre(root): #前序遍历二叉树
    if root == None: 
        return
    print(root.data, end=" ") # 输出节点数据
    dispaly_tree_pre(root.lchild) # 递归实现下面左子节点的输出
    dispaly_tree_pre(root.rchild) # 递归实现下面左子节点的输出
   
if __name__ == "__main__":
    root = Treenode(1)
    node1 = Treenode(2)
    node2 = Treenode(3)
    node3 = Treenode(4)
    node4 = Treenode(5)
    node5 = Treenode(6)
    root.lchild = node1
    root.rchild = node2
    node1.lchild = node3
    node1.rchild = node4
    node2.lchild = node5
    dispaly_tree_pre(root)
    print("")
   

执行结果:
在这里插入图片描述
python数据结构之二叉树_第2张图片

(2)中序遍历

#中序的迭代输出
def dispaly_tree_mid(root):
    if root == None:
        return
    dispaly_tree_mid(root.lchild)
    print(root.data, end=" ")
    dispaly_tree_mid(root.rchild)

输出结果:
在这里插入图片描述
python数据结构之二叉树_第3张图片

(3)后序遍历

def dispaly_tree_post(root):
    if root == None:
        return
    dispaly_tree_post(root.lchild)
    dispaly_tree_post(root.rchild)
    print(root.data, end=" ")

在这里插入图片描述
python数据结构之二叉树_第4张图片

3、添加节点add_node

class Treenode():
    def __init__(self,data):
        self.data = data
        self.lchild = None
        self.rchild = None
def dispaly_tree_pre(root): 
    if root == None: 
        return
    print(root.data, end=" ") 
    dispaly_tree_pre(root.lchild) 
    dispaly_tree_pre(root.rchild) 
    
def add_node(root,data):
    new_node = Treenode(data) #新节点继承Treenode类
    queue = [root] #以队列的形式添加节点
    while queue:
        tmp_root = queue.pop() #queue不为空就从队首删除一个元素
        if tmp_root.lchild == None: #如果root的左节点为None,则添加新节点至此
            tmp_root.lchild = new_node
            return
        elif  tmp_root.rchild == None:#如果root的右节点为None,则添加新节点至此
            tmp_root.rchild = new_node
            return
        else: # 左右节点均不为None,将左右节点添加至queue中,
            queue.append(tmp_root.lchild)
            queue.append(tmp_root.rchild)
if __name__ == "__main__":
    root = Treenode(1)
    node1 = Treenode(2)
    node2 = Treenode(3)
    node3 = Treenode(4)
    node4 = Treenode(5)
    node5 = Treenode(6)

    root.lchild = node1
    root.rchild = node2
    node1.lchild = node3
    node1.rchild = node4
    node2.lchild = node5

    dispaly_tree_pre(root)
    print("")
    add_node(root,7)
    add_node(root,8)
    add_node(root,9)
    dispaly_tree_pre(root)
    print("")

添加7 8 9三个节点数据
在这里插入图片描述

你可能感兴趣的:(python,二叉树,队列,python,数据结构)