二叉树转换成字典,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
	}
}
posted @ 2022-08-13 15:09  ty1539  阅读(69)  评论(0编辑  收藏  举报