找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 4658|回复: 0

[求助] Python 数据结构 - 树

1

主题

1

帖子

1

积分

贫民

积分
1
alexwang9322 发表于 2020-6-21 00:24:23 | 显示全部楼层 |阅读模式
1威望
求帮助 本人刚开始学习python数据结构。有个作业实在不知道怎么做,求帮助谢谢!
要求:
1. 请使用提供的数据random.csv做出来一个二叉树。数据的顺序很重要,请不要排序
2. 请使用提供的代码 breadth_first_traverse.py 来创建一个执行深度优先搜索(DFS)的方法
3. 评估刚创建的树种叶节点的数量(应该有31个叶节点)

代码如下:
breadth_first_traverse.py:

from collecti** import deque

class Node:
        def __init__(self, data):
            self.data = data
            self.right_child = None
            self.left_child = None

n1 = Node("root node")  
n2 = Node("left child node")
n3 = Node("right child node")
n4 = Node("left grandchild node")
n1.left_child = n2
n1.right_child = n3
n2.left_child = n4

def breadth_first_traversal(root_node):
    list_of_nodes = []
    traversal_queue = deque([root_node])

    while len(traversal_queue) > 0:
        node = traversal_queue.popleft()
        list_of_nodes.append(node.data)
        if node.left_child:
            traversal_queue.append(node.left_child)
        if node.right_child:
            traversal_queue.append(node.right_child)
    return list_of_nodes

print(breadth_first_traversal(n1))


tree_traversal.py
class Node:
        def __init__(self, data):
            self.data = data
            self.right_child = None
            self.left_child = None

n1 = Node("root node")  
n2 = Node("left child node")
n3 = Node("right child node")
n4 = Node("left grandchild node")
n1.left_child = n2
n1.right_child = n3
n2.left_child = n4

current = n1
while current:
        print(current.data)
        current = current.left_child

print("\n" )

def inorder(root_node):
        current = root_node
        if current is None:
            return
        inorder(current.left_child)
        print(current.data)
        inorder(current.right_child)

def preorder(root_node):
        current = root_node
        if current is None:
            return
        print(current.data)
        preorder(current.left_child)
        preorder(current.right_child)

def postorder(root_node):
        current = root_node
        if current is None:
            return
        postorder(current.left_child)
        postorder(current.right_child)
        print(current.data)

inorder( n1)
print("\n" )
preorder( n1)
print("\n" )
postorder(n1)


rpn.py
class Stack:
     def __init__(self):
         self.elements = []

     def push(self, item):
         self.elements.append(item)

     def pop(self):
         return self.elements.pop()


class TreeNode:
    def __init__(self, data=None):
        self.data = data
        self.right = None
        self.left = None

def calc(node):
    if node.data is "+":
        return calc(node.left) + calc(node.right)
    elif node.data is "-":
        return calc(node.left) - calc(node.right)
    elif node.data is "*":
        return calc(node.left) * calc(node.right)
    elif node.data is "/":
        return calc(node.left) / calc(node.right)
    else:
        return node.data

expr = "4 5 + 5 3 - *".split()
stack = Stack()

for term in expr:
    if term in "+-*/":
        node = TreeNode(term)
        node.right = stack.pop()
        node.left = stack.pop()
    else:
        node = TreeNode(int(term))
    stack.push(node)

root = stack.pop()
result = calc(root)
print(result)

数据random.csv
314933189336648013967015501539143185591041131361296333093749207414984731627117343572586425534477759999516796471503182428127392429682243774760301578536555506823905344295965906225809255617694901484212729834484261924878581250310231396198507658389463252850782279938863470593982287778846802773916973926005734547059275144950014760564137726493130317657850725175805417214137307346658233496663987461971151











[size=6.972px]

[size=15.6977px]random_numbers.csv

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表