CEKnot というオブジェクトがあり、同様の CEKnot オブジェクトの配列である subknots というプロパティがあります。ここで、このツリーの深さを計算したいと思います。サブノットが 2 つ以上になる可能性があるため、これはバイナリ ツリーではありません。ここに私が試したコードがあります..
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
CEProjectDTO* project = [self.tblViewDatasource objectAtIndex:indexPath.row];
CEServiceSession *serviceSession = [CEServiceSession new];
[CEProgressHUD showWithTitle:@"Loading..."];
[serviceSession.projectPhaseService getProjectPhasesWithProjectID:project.i3D onFinish:^(NSArray * phaseList){
self.phaseDTOList = phaseList;
NSLog(@"Count is %d",[self.phaseDTOList count]);
[CEProgressHUD hide];
}onError:^(NSString *title, NSString *message) {
[CEProgressHUD hide];
[CEAlertViewHelper showOKAlertViewWithTitle:title message:message];
}];
self.mindMapLevelObjectCount = nil;
self.mindMapLevelObjectCount = [[NSMutableDictionary alloc] init];
self.level = 1;
self.numberOfKnotsOnThisLevel = 0;
CEProjectToKnotConverter* converter = [CEProjectToKnotConverter new];
CEProjectKnot* baseKnot = [converter convertProject:project withPhases:self.phaseDTOList];
self.numberOfKnotsOnThisLevel = self.numberOfKnotsOnThisLevel + [baseKnot.subKnots count];
[self.mindMapLevelObjectCount setObject:[NSNumber numberWithInt:self.numberOfKnotsOnThisLevel] forKey:[NSString stringWithFormat:@"%d",self.level]];
self.numberOfKnotsOnThisLevel = 0;
self.level = 2;
[self calculateMindMapLevels:baseKnot];
NSLog(@"MIND MAP LEVEL OBJE %@", self.mindMapLevelObjectCount);
CEMindMapViewController *mindMapViewController = [[CEViewControllerManager sharedInstance] createViewController:[CEMindMapViewController class]];
mindMapViewController.baseKnot = baseKnot;
[self presentModalViewController:mindMapViewController animated:YES];
}
-(void)calculateMindMapLevels:(CEKnot*)projectKnot{
for (CEKnot* subKnot in projectKnot.subKnots) {
self.numberOfKnotsOnThisLevel = self.numberOfKnotsOnThisLevel + [subKnot.subKnots count];
NSLog(@"Level %d total of nots %d project not subknot %d", self.level,self.numberOfKnotsOnThisLevel, [subKnot.subKnots count]);
}
[self.mindMapLevelObjectCount setObject:[NSNumber numberWithInt:self.numberOfKnotsOnThisLevel] forKey:[NSString stringWithFormat:@"%d",self.level]];
for (CEKnot* subKnot in projectKnot.subKnots) {
[self calculateMindMapLevels:subKnot];
self.numberOfKnotsOnThisLevel = 0;
}
self.level = _level +1;
}
深さを正しく取得できず、多数のアルゴリズムを試しましたが、深さを正しく取得できません。どんな助けでも大歓迎です。