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 |