二叉树转换成字典,python的min-in混合类的使用


class ToDictMixin(object):
    def to_dict(self):
        return self._traverse_dict(self.__dict__)
    # 具体的实现代码写起来也很直观:我们只需要用hasattr函数动态地访问属性、isinstance函数动态地检测对象类型,并用
    # dict_来访问实例内部的字典即可。
    
    def _traverse_dict(se1f, instance_dict):
        output = {}
        for key, value in instance_dict.items():
            output[key] = se1f._traverse(key, value)
        return output

    def _traverse(self, key, value):
        if isinstance(value, ToDictMixin):
            return value.to_dict()
        elif isinstance(value, dict):
            return self._traverse_dict(value)
        elif isinstance(value, list):
            return [self._traverse(key, i) for i in value]
        elif hasattr(value, '__dict__'):
            return self._traverse_dict(value.__dict__)
        else:
            return value


class BinaryTree(ToDictMixin):
    def __init__(self, value, left=None, right=None):
        self.value = value
        self.left = left
        self.right = right
    # 现在,我们可以把一大批互相关联的Python对象都轻松地转换成字典。


tree = BinaryTree(10, left=BinaryTree(7, right=BinaryTree(9)), right=BinaryTree(13, left=BinaryTree(11)))

print(tree.to_dict())

输出:

{
	'value': 10,
	'left': {
		'value': 7,
		'left': None,
		'right': {
			'value': 9,
			'left': None,
			'right': None
		}
	},
	'right': {
		'value': 13,
		'left': {
			'value': 11,
			'left': None,
			'right': None
		},
		'right': None
	}
}

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/280319.html

(0)
上一篇 2022年8月13日
下一篇 2022年8月13日

相关推荐

发表回复

登录后才能评论