wtreemgr.m
上传用户:haiyisale
上传日期:2013-01-09
资源大小:3246k
文件大小:4k
源码类别:

波变换

开发平台:

Matlab

  1. function varargout = wtreemgr(option,t,varargin)
  2. %WTREEMGR NTREE object manager.
  3. %   VARARGOUT = WTREEMGR(OPTION,T,VARARGIN)
  4. %   Allowed values for OPTION and associated uses are
  5. %   described in the functions listed in the See also section:
  6. %
  7. %   'order'    : Order of tree.
  8. %   'depth'    : Depth of tree.
  9. %   'leaves'   : Terminal nodes.
  10. %   'tnodes'   : Terminal nodes.
  11. %   'noleaves' : Not Terminal nodes.
  12. %   'allnodes' : All nodes.
  13. %   'isnode'   : Is node.
  14. %   'istnode'  : Lop "is terminal node".
  15. %   'nodeasc'  : Node ascendants.
  16. %   'nodedesc' : Node descendants.
  17. %   'nodepar'  : Node parent.
  18. %   'ntnode'   : Number of terminal nodes.
  19. %
  20. %    See also ALLNODES, ISNODE, ISTNODE, LEAVES, NODEASC, NODEDESC,
  21. %             NODEPAR, NOLEAVES, NTNODE, TNODES, TREEDPTH, TREEORD.
  22. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 01-Jan-97.
  23. %   Last Revision: 22-May-2003.
  24. %   Copyright 1995-2004 The MathWorks, Inc.
  25. %   $Revision: 1.5.4.3 $  $Date: 2004/03/15 22:38:49 $
  26. switch option
  27.     case {'order','depth'} , varargout{1} = t.(option);
  28.     
  29.     case 'leaves' 
  30.         order = t.order;
  31.         tn  = t.tn;
  32.         K = [1:length(tn)]';
  33.         if nargin>2
  34.             flagdps = varargin{1};
  35.             switch flagdps
  36.                 case {'s','sort'}
  37.                   [tn,K] = sort(tn); [nul,K] = sort(K);
  38.                 case {'sdp','dps','sortdp','dpsort'}
  39.                   [tn,K] = sort(tn); [nul,K] = sort(K);
  40.                   [tn(:,1),tn(:,2)] = ind2depo(order,tn);
  41.                 case {'dp'}
  42.                   [tn(:,1),tn(:,2)] = ind2depo(order,tn);
  43.             end
  44.         end
  45.         varargout = {tn,K};
  46.   
  47.     case 'tnodes'
  48.         if nargin==2 , outType = 'sort'; else , outType = 'sortdp'; end
  49.         [varargout{1},varargout{2}] = wtreemgr('leaves',t,outType);
  50.     case 'noleaves'    
  51.         if nargin==2 , flagdp = false; else , flagdp = true; end 
  52.         varargout{1} = descendants(t,0,'not_tn',flagdp);
  53.     case 'allnodes'
  54.         order = t.order;
  55.         depth = t.depth;
  56.         varargout{1}    = t.tn;
  57.         if (length(varargout{1})==1) && (depth==0) , return; end
  58.         if nargin==2 , flagdp = false; else , flagdp = true; end
  59.         varargout{1} = ascendants(varargout{1},order,depth,flagdp);
  60.         
  61.     case 'isnode'
  62.         order = t.order;
  63.         depth = t.depth;
  64.         allN  = t.tn;
  65.         if (depth~=0)
  66.             flagdp = false;
  67.             allN = ascendants(allN,order,depth,flagdp);
  68.         end
  69.         nodes = depo2ind(order,varargin{1});
  70.         if prod(size(nodes))<=1
  71.             if find(allN==nodes), varargout{1} = true;
  72.             else , varargout{1} = false;
  73.             end
  74.         else
  75.             varargout{1} = ismember(nodes,allN);
  76.         end
  77.     case 'istnode'
  78.         order = t.order;
  79.         tn    = t.tn;
  80.         nodes = depo2ind(order,varargin{1});
  81.         [tf,varargout{1}] = ismember(nodes,tn);
  82.     case 'nodeasc'
  83.         order = t.order;
  84.         node  = depo2ind(order,varargin{1});
  85.         [d,p] = ind2depo(order,node);
  86.         if nargin==3 , flagdp = false; else , flagdp = true; end
  87.         varargout{1} = flipud(ascendants(node,order,d,flagdp));
  88.     case 'nodedesc'
  89.         if nargin==3 , flagdp = false; else , flagdp = true; end
  90.         varargout{1} = descendants(t,varargin{1},'all',flagdp);
  91.     case 'nodepar'
  92.         order = t.order;
  93.         node  = depo2ind(order,varargin{1});
  94.         par   = floor((node-1)/order);
  95.         if nargin==4 , [par(:,1),par(:,2)] = ind2depo(order,par); end
  96.         varargout{1} = par; 
  97.     case 'ntnode'
  98.         tn = t.tn';
  99.         varargout{1} = length(tn);
  100.     otherwise
  101.         error('Unknown option.');
  102. end