| 
									
										
										
										
											2009-12-13 06:40:27 +08:00
										 |  |  | % find a bottom to up ordering given the tree structure {pred} returned by matlab's graphminspantree | 
					
						
							|  |  |  | function [ordering] = bottom_up_ordering(pred)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | %% compute the levels of the nodes | 
					
						
							|  |  |  | parents = [0]; | 
					
						
							|  |  |  | node_levels = zeros(length(pred), 1); | 
					
						
							|  |  |  | current_level = 1; | 
					
						
							|  |  |  | while ~isempty(parents) | 
					
						
							|  |  |  |     parents = find(ismember(pred, parents)); | 
					
						
							|  |  |  |     node_levels(parents) = current_level; | 
					
						
							|  |  |  |     current_level = current_level + 1; | 
					
						
							|  |  |  | end | 
					
						
							| 
									
										
										
										
											2009-12-13 09:24:09 +08:00
										 |  |  | [~, node_order] = sort(node_levels, 'descend');  % the order of the nodes in leaves-to-root order | 
					
						
							| 
									
										
										
										
											2009-12-13 06:40:27 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | ordering = Ordering(); | 
					
						
							| 
									
										
										
										
											2009-12-13 09:24:09 +08:00
										 |  |  | for i = 1:length(node_order) | 
					
						
							|  |  |  |     ordering.push_back(sprintf('x%d', node_order(i))); | 
					
						
							| 
									
										
										
										
											2009-12-13 06:40:27 +08:00
										 |  |  | end | 
					
						
							|  |  |  | end |