本文共 3407 字,大约阅读时间需要 11 分钟。
??????????????Binary Search Tree?BST?????????Objective-C?????????????????????
?????????BinarySearchTreeNode????????????????????????
@interface BinarySearchTreeNode : NSObject@property (nonatomic, assign) NSInteger value;@end
????????????????????????????????????????????????????????????
- (BinarySearchTreeNode *)insert:(NSInteger)newValue afterNode:(BinarySearchTreeNode *)node { // ????? BinarySearchTreeNode *newNode = [[BinarySearchTreeNode alloc] init]; newNode.value = newValue; // ?????? if (node.value < newValue) { // ????? if (node.right == nil) { node.right = newNode; } else { // ??????????? BinarySearchTreeNode *rightNode = node.right; if (rightNode.value < newValue) { rightNode.right = newNode; } else { rightNode.left = newNode; } } } else { // ????? if (node.left == nil) { node.left = newNode; } else { // ??????????????? BinarySearchTreeNode *leftNode = node.left; if (leftNode.value > newValue) { leftNode.right = newNode; } else { leftNode.left = newNode; } } } return newNode;} ??????????????????????????????????????
- (BinarySearchTreeNode *)search:(NSInteger)searchValue { // ???????? BinarySearchTreeNode *node = [self.root left]; // ???????????? if (node.value == searchValue) { return node; } // ????????????????????? if (node.value > searchValue) { if (node.left) { return [self search:searchValue fromNode:node.left]; } else { return nil; } } // ????????????????????? if (node.right) { return [self search:searchValue fromNode:node.right]; } else { return nil; }}- (BinarySearchTreeNode *search:(NSInteger)searchValue fromNode:(BinarySearchTreeNode *)node { // ???????????? if (node.value == searchValue) { return node; } // ????????????????????? if (node.value > searchValue) { if (node.left) { return [self search:searchValue fromNode:node.left]; } else { return nil; } } // ????????????????????? if (node.right) { return [self search:searchValue fromNode:node.right]; } else { return nil; }}) ???????????????????????????????????????
- (void)traverse:(BinarySearchTreeNode *)node { // ?????? [self visit:node]; // ?????????? if (node.left) { [self traverse:node.left]; } // ?????????? if (node.right) { [self traverse:node.right]; }}) ?????????????????????
// ?????BinarySearchTreeNode *root = [[BinarySearchTreeNode alloc] init];root.value = 5;// ????[root insert:3 afterNode:root]; // ?????3[root insert:8 afterNode:root]; // ?????8[root insert:10 afterNode:root.right]; // ?8?????10[root insert:2 afterNode:root.left]; // ?3?????2// ????NSLog(@"??3?");BinarySearchTreeNode *node3 = [root search:3];NSLog(@"??8?");BinarySearchTreeNode *node8 = [root search:8];NSLog(@"??10?");BinarySearchTreeNode *node10 = [root search:10];NSLog(@"??1?");BinarySearchTreeNode *node1 = [root search:1];
????????????????????????????????????????????????????????????????????????????
转载地址:http://qdnfk.baihongyu.com/