基于python的list实现的不规则多叉树

python的list实现的多叉树,建树以及遍历

这个树有什么优点呢?
1.子树的个数可以是0到无限大(意味着你可以任意构造一些不规则的树)
2.极低的内存消耗

// 源代码

def make_list_tree():    #调用此函数建树
    tree=[]
    zhan=[tree]
    j=sub=sub_=t=t_=0
    for tr in zhan:
        j+=1
        sub_+=1
        t-=1
        x=input('请输入第%s层第%s个的节点值:'%(sub,sub_))
        y=int(input('请输入%s节点的子节点个数:'%x))
        tr.append(x)
        t_+=y
        if t==0:
            sub+=1
            t=t_
            sub_=t_=0
        if y==0:
            continue
        while y>0:
            tr.append([])
            y-=1
        for child in tr[1:]:
            if type(child)==list:
                zhan.append(child)
    while 0<j:
        zhan.pop(0)
        j-=1
    return tree

//--------------------漂亮的分割线----------------------

def list_tree_print(tree):   #此函数用于层次遍历
    zhan=[tree]
    while len(zhan):
        j=0
        for y in zhan:
            j+=1
            print(y[0])
            for x in y[1:]:
                if type(x)==list:
                    zhan.append(x)
        while 0<j:
            zhan.pop(0)
            j-=1
### 回答1: 可以用Python的类来表示树的节点,每个节点包括一个值和一个子节点列表,子节点列表中存储了该节点的所有子节点。孩子兄弟法是一种特殊的树形结构,其中每个节点有一个左兄弟和一个右兄弟,以及一个第一个孩子节点。以下是一个示例代码: ```python class TreeNode: def __init__(self, value): self.value = value self.first_child = None self.next_sibling = None def add_child(self, child): if self.first_child is None: self.first_child = child else: sibling = self.first_child while sibling.next_sibling is not None: sibling = sibling.next_sibling sibling.next_sibling = child ``` 在这个示例代码中,TreeNode表示树的节点,包括一个值(value)、第一个孩子节点(first_child)和下一个兄弟节点(next_sibling)。add_child方法用于添加一个子节点,如果当前节点没有孩子节点,则将新节点作为第一个孩子节点;否则,遍历当前节点的所有兄弟节点,找到最后一个兄弟节点,并将新节点作为它的下一个兄弟节点。 ### 回答2: Python中用孩子兄弟法(也叫做孩子兄弟表示法或叉树表示法)来表示树结构。这种方法把一棵树转化为一个包含节点和子节点的列表。 具体实现上,一棵树的节点由一个元组表示,包含两个元素:一个是节点的值,另一个是指向子节点的链表。链接子节点的链表是通过保存指向子节点的引用来实现的。 例如,我们可以通过一个字典来表示一棵树。字典的键是节点的值,而对应的值是一个列表,包含指向子节点的引用。一个没有子节点的节点可以用一个空列表表示。树的根节点可以通过一个键值为根节点值的字典项来表示。 下面是一个例子,通过孩子兄弟法表示一棵树: ```python tree = { 'A': [{'B': []}, {'C': [{'D': []}, {'E': []}]}] } ``` 在这个例子中,树的根节点是'A',它有两个子节点'B'和'C'。节点'C'有两个子节点'D'和'E'。节点'B'和节点'E'都没有子节点。 使用孩子兄弟法可以方便地表示树的结构,而且在Python中对于树的遍历和操作也更加方便。通过使用孩子兄弟法,我们可以灵活地表示树的复杂结构,并且能够快速地对树的节点进行操作。 ### 回答3: 在Python中,可以使用孩子兄弟法(Child Sibling List)来表示树的结构。孩子兄弟法是一种常用的树的表示方法,它通过定义每个节点的子节点和兄弟节点来描述树的结构。 在实现孩子兄弟法表示树的过程中,可以定义一个节点类Node,该类包含一个数据项和指向其第一个子节点和兄弟节点的指针。具体实现如下: ```python class TreeNode: def __init__(self, data): self.data = data self.first_child = None self.next_sibling = None ``` 通过定义这样一个节点类,我们可以创建树的节点对象,并通过指针的方式连接起来。 例如,创建一个包含5个节点的树,其中节点A是根节点,它有两个子节点B和C,节点B有两个兄弟节点D和E,节点C没有子节点和兄弟节点。可以通过如下代码来构建这棵树: ```python # 创建节点 nodeA = TreeNode('A') nodeB = TreeNode('B') nodeC = TreeNode('C') nodeD = TreeNode('D') nodeE = TreeNode('E') # 连接节点 nodeA.first_child = nodeB nodeB.next_sibling = nodeC nodeB.first_child = nodeD nodeD.next_sibling = nodeE ``` 通过这样的方式,我们就可以通过孩子兄弟法表示了一棵树。 使用孩子兄弟法表示树的好处是可以灵活地表示不规则的树结构,不同于常见的二叉树等固定结构的表示方法。同时,它也便于在实际应用中对树进行操作和遍历。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值