Files
ZERO_CODE/ZeroCodeProject/dependency/classes/tree/treeClass.py

105 lines
2.8 KiB
Python
Raw Normal View History

2026-01-11 00:11:34 +08:00
"""
@project:userbuild
@File:treeClass.py
@IDE:PyCharm
@Author:徐彬程
@Date:2023/11/27 16:00
"""
class PythonCodeTreeNode:
def __init__(self, data, parent=None, last_node=None, indentation=0, serial_number=0, extent_data=None):
if extent_data is None:
extent_data = {}
self.data = data
self.parent = parent
self.children = []
self.indentation = indentation
self.extent_data = extent_data
self.serial_number = serial_number
self.last_node = last_node
# 树结构类(非平衡非二叉树)
class PythonCodeTreeController:
# 增
@classmethod
def add_data(cls, node):
node.parent.children.append(node)
# 删
@classmethod
def del_data(cls):
pass
# 改
@classmethod
def edit_data(cls):
pass
# 查
@classmethod
def find_data(cls, root_node: PythonCodeTreeNode, i, s):
if root_node.indentation == i and root_node.serial_number == s:
return root_node
for child in root_node.children:
result = cls.find_data(child, i, s)
if result:
return result
return None
@classmethod
def find_data_by_path(cls, root_node, path, depth=0):
if root_node is None:
return None
components = path.split('/')
current_node = root_node
for component in components:
if not component: # 跳过空的组件(例如,路径开头为 '/'
continue
found = False
for child in current_node.children:
if child.data["name"] == component:
current_node = child
found = True
break
if not found:
return None # 如果未找到路径中的某个组件返回None
return current_node
# 输出
@classmethod
def to_array(cls, node):
result = {}
if not isinstance(node, str):
result = node.data.copy()
result["indentation"] = node.indentation
result["serial_number"] = node.serial_number
result["children"] = [cls.to_array(child) for child in node.children]
return result
# 输出
@classmethod
def to_array2(cls, node):
result = {}
if not isinstance(node, str):
result = node.data.copy()
result["indentation"] = node.indentation
result["serial_number"] = node.serial_number
return result
@classmethod
def to_string(cls, code_json):
# 输出当前节点的值
if not code_json['syntax_statement'] == 'Root':
print(" " * (code_json["syntax_indentation"] - 4) + code_json['syntax_statement'])
# 递归遍历子节点
for child in code_json['children']:
cls.to_string(child)