怎么在Python中创建一个二叉树

  介绍

这篇文章将为大家详细讲解有关怎么在Python中创建一个二叉树,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

二叉树节点定义

二叉树的节点定义如下:

class  TreeNode(): #二叉树节点   def 才能;__init__(自我,val, lchild=None, rchild=None):   ,,,的自己。val=val #二叉树的节点值   ,,,的自己。lchild=lchild #左孩子   ,,,的自己。rchild=rchild #右孩子

递归构建二叉树

本文使用的前序递归构建的方法(其余顺序读者自行变化,本文主要意在如何快速构建能够执行的二叉树)
例如,我们想构建一个如下图所示的树(其前序遍历结果为:中的):

怎么在Python中创建一个二叉树

这里我们需要使用到扩展的二叉树,也就是要告诉计算机什么是叶结点,什么是空节点,否侧无法分辨左右节点。例如先序遍历的顺序为“abcde",扩展的二叉树前序序列为:“abc”e d # # # # # #, #代表此处节点为None,如下图:

怎么在Python中创建一个二叉树

既然是使用递归的方法构建二叉树,主要需要理解递归的过程,这种思路将在之后的很多地方用的到。
要知道如何递归的构建二叉树,我们不能纠结于递归每一层到底干了什么,这样就会一直纠结下去(所有的递归问题都一样)。我们需要注意的是:

<李>

在我们的任务中,终止条件是什么?

<李>

在我们的任务中,本次递归要干嘛?

<李>

在我们的任务中,本次递归要返回给上一次递归的是啥?

在递归构建二叉树的任务中,我们要做到不纠结于每一层,而是只关注该层在做什么,这样,对于下图左侧的树,我们就可以看作为右侧的树,它只有自己(a),左子树B (bcd)和右子树C (e)。

怎么在Python中创建一个二叉树

这样我们需要注意的那三个问题的回答自然就有了(做递归问题,心中要想着怎么回答这三个问题):

<李>

在我们的任务中,终止条件是什么?

[给我们的字符用完,也就不需要再创建节点了)

<李>

在我们的任务中,本次递归要干嘛?

[本次递归要创建三个节点,一个根节点,一个左节点,一个右节点)

<李>

在我们的任务中,本次递归要返回给上一次递归的是啥?

[当然是返回一个本层构造好的树的根节点]
理解了上述三个问题的回答,递归的代码自然可以写出:

def  Creat_Tree(根,val):   if 才能len (val)==0: #终止条件:val用完的了   ,,,return 根   if 才能vals[0] !=& # 39; # & # 39;: #本层需要干的就是构建根,Root.lchild, Root.rchild三个节点。   ,,,Root =, TreeNode (vals [0])   ,,,vals.pop (0)   ,,,Root.lchild =, Creat_Tree (Root.lchild val)   ,,,Root.rchild =, Creat_Tree (Root.rchild val)   ,,,return 根#本次递归要返回给上一次的本层构造好的树的根节点   其他的才能:   ,,,根=没有   ,,,vals.pop (0)   ,,,return 根#本次递归要返回给上一次的本层构造好的树的根节点

看懂了上述内容,构建一棵我们想象的二叉树就很简单了,只要输入一个我们心目中前序遍历扩展的二叉树序列即可:

if  __name__ ==, & # 39; __main__ # 39;:   时间=Root 才能;没有   str=才能“abc e d # # # # # #, #前序遍历扩展的二叉树序列   vals 才能=,列表(str)   根才能=Creat_Tree(根,vals) #根就是我们要的二叉树的根节点。

怎么在Python中创建一个二叉树