Я думаю (и кто-то может исправить меня, если я ошибаюсь), что нет встроенного способа сглаживания рекурсивной структуры. Один из возможных способов построения вашего дерева - использовать treeplot
, для чего ваши данные должны быть в определенном формате. Вы могли бы добиться этого следующим образом:
function [nodes,attr] = flatten_struct(dtree,level,nodes,attr)
% Flattens the decision tree struct into a format usable by treeplot
if isempty(dtree)
return;
end
if nargin==1
level=0;
nodes=[];
attr={};
end
nodes = [nodes,level];
attr = [attr,dtree.root];
[nodes,attr] = flatten_struct(dtree.right,level+1,nodes,attr);
[nodes,attr] = flatten_struct(dtree.left,level+1,nodes,attr);
Вы назвали бы этот код с [nodes,attr] = flatten_struct(tree)
, а затем вы можете построить дерево с помощью treeplot(nodes)
. Вы должны иметь возможность добавлять метки, используя метод, описанный в this, на другой вопрос. Что-то вроде:
[nodes,attr] = flatten_struct(tree);
treeplot(nodes);
[x,y] = treelayout(nodes);
for k=1:length(nodes)
text(x(k),y(k),attr(k));
end
хотя вы, вероятно, придется возиться со значениями x
и y
таким образом, чтобы они не перекрывали друг друга узлы дерева.