88 lines
2.6 KiB
Matlab
88 lines
2.6 KiB
Matlab
classdef thinTree
|
|
|
|
% Attributes
|
|
properties (SetAccess = private)
|
|
nodes = { [] }; % Array of the nodes
|
|
depth = 0; % Depth of the tree
|
|
w = 0 % Number of parents for each node
|
|
links = []; % The matrix representing the links between the nodes
|
|
end
|
|
|
|
% Methods
|
|
methods
|
|
% Constructor
|
|
function [obj root_ID] = thinTree(d, w)
|
|
|
|
% If 0 input arguments, assume d = 1 and w = 1
|
|
if nargin < 1
|
|
[obj root_ID] = thinTree(1, 1);
|
|
return
|
|
end
|
|
% If 1 input argument, assume w = 1
|
|
if nargin < 1
|
|
[obj root_ID] = thinTree(d, 1);
|
|
return
|
|
end
|
|
% Else
|
|
|
|
if w > d-1
|
|
error('MATLAB:thinTree:thinTree', ...
|
|
'Cannot have %d parents on a binary tree of depth %d. You must have nParents < %d here.\n', w, d, d);
|
|
end
|
|
|
|
root_ID = 1;
|
|
obj.nodes = cell(2^d - 1,1); % Creation of the d^2 empty cells
|
|
obj.depth = d;
|
|
obj.w = w;
|
|
obj.links = eye(2^d - 1); % Creation of the links matrix
|
|
|
|
% Link the cells
|
|
|
|
end
|
|
|
|
% Function to add a content for a specific node
|
|
function [obj] = addContent(obj, content, nodeID)
|
|
obj.nodes{nodeID} = content;
|
|
return
|
|
end
|
|
|
|
% Function to return the ID's of a node's parents
|
|
function ids = getParents(obj, nodeID)
|
|
% Initialisation
|
|
node = nodeID;
|
|
depthOfNode = obj.getNodeDepth(nodeID);
|
|
if depthOfNode == 1
|
|
ids = 1;
|
|
else
|
|
ids = zeros(1,min(obj.w, depthOfNode-1));
|
|
% Loop on w, the number of parents associated to one node
|
|
for i=1:min(obj.w, depthOfNode-1)
|
|
ids(i) = floor(node/2);
|
|
node = floor(node/2);
|
|
end
|
|
end
|
|
% Return
|
|
return
|
|
end
|
|
|
|
% Accessors
|
|
function output = getDepth(obj)
|
|
output = obj.depth;
|
|
return
|
|
end
|
|
|
|
function output = getW(obj)
|
|
output = obj.w;
|
|
return
|
|
end
|
|
|
|
function output = getNumberOfElements(obj)
|
|
output = 2^obj.depth - 1;
|
|
end
|
|
|
|
% Returns the depth of a node
|
|
function output = getNodeDepth(obj, nodeID)
|
|
output = ceil(log(nodeID+1)/log(2));
|
|
end
|
|
end % Methods
|
|
end % Class |