题目:
从上往下打印出二叉树的每个结点,同一层的结点按照从左向右的顺序打印。
思路:
从上到下打印二叉树的规律:每一次打印一个结点的时候,如果该结点有子结点, 则把该结点的子结点放到一个队列的末尾。接下来到队列的头部取出最早进入队列的结点,重复前面的打印操作,直至队列中所有的结点都被打印出来为止。
代码:
树节点:
#import <Foundation/Foundation.h>
// 树节点
@interface NSBinaryTreeNode : NSObject
// 值
@property (nonatomic, strong) NSString *value;
// 左节点
@property (nonatomic, strong) NSBinaryTreeNode *left;
// 右节点
@property (nonatomic, strong) NSBinaryTreeNode *right;
@end
逻辑代码:
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSBinaryTreeNode *root = [NSBinaryTreeNode new];
root.value = @"8";
root.left = [NSBinaryTreeNode new];
root.left.value = @"6";
root.left.left = [NSBinaryTreeNode new];
root.left.left.value = @"5";
root.left.right = [NSBinaryTreeNode new];
root.left.right.value = @"7";
root.right = [NSBinaryTreeNode new];
root.right.value = @"10";
root.right.left = [NSBinaryTreeNode new];
root.right.left.value = @"9";
root.right.right = [NSBinaryTreeNode new];
root.right.right.value = @"11";
printBinaryTree(root);
}
return 0;
}
#import "NSBinaryTreeNode.h"
#import <Foundation/Foundation.h>
void printBinaryTree (NSBinaryTreeNode *headerNode){
if (headerNode == nil) {
return;
}
NSMutableArray *tmpNodeArray = [NSMutableArray array];
[tmpNodeArray addObject:headerNode];
while (tmpNodeArray.count != 0) {
NSBinaryTreeNode *tmpNode = tmpNodeArray[0];
NSLog(@"%@", tmpNode.value);
[tmpNodeArray removeObject:tmpNode];
if (tmpNode.left != nil) {
[tmpNodeArray addObject:tmpNode.left];
}
if (tmpNode.right != nil) {
[tmpNodeArray addObject:tmpNode.right];
}
}
}
网友评论